import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class Main {
 public static void main(String[] args)
 {
  try
  {
   String s = "s";
   System.out.println( Arrays.toString( s.getBytes("utf8") ) );
   System.out.println( Arrays.toString( s.getBytes("utf16") ) );
   System.out.println( Arrays.toString( s.getBytes("utf32") ) );
  }
  catch (UnsupportedEncodingException e)
  {
   e.printStackTrace();
  }
 }
}


安慰:

[115]
[-2, -1, 0, 115]
[0, 0, 0, 115]

它是什么?

[-2,-1]-???

另外,我指出,如果我这样做:

String s = new String(new char[]{'\u1251'});
System.out.println( Arrays.toString( s.getBytes("utf8") ) );
System.out.println( Arrays.toString( s.getBytes("utf16") ) );
System.out.println( Arrays.toString( s.getBytes("utf32") ) );

安慰:

[-31, -119, -111]
[-2, -1, 18, 81]
[0, 0, 18, 81]

最佳答案

-2,-1是字节顺序标记(BOM-U + FEFF),它指示以下文本以UTF-16格式编码。

您可能会得到这个信息,因为虽然只有一种UTF8和UTF32编码,但有两种UTF16编码UTF16LE和UTF16BE,其中16位值中的2个字节以Big-Endian或Little Endian格式存储。

由于返回的值为0xFE xFF,这表明编码为UTF16BE

关于java - 未知字节由方法getBytes()返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4194878/

10-11 01:05