String.getBytes()返回Unicode字符数组

时间:2017-05-06 05:30:30

标签: java arrays unicode

我正在阅读getbytes,并且从文档中说它会返回      生成的字节数组

但是当我运行以下程序时,我发现它正在返回Unicode符号数组。

public class GetBytesExample {
    public static void main(String args[]) {
        String str = new String("A");
        byte[] array1 = str.getBytes();
        System.out.print("Default Charset encoding:");
        for (byte b : array1) {
            System.out.print(b);
        }

    }
}

以上程序打印输出

Default Charset encoding:65

65相当于A的Unicode表示形式。我的问题是,返回类型的字节在哪里。

3 个答案:

答案 0 :(得分:4)

没有PrintStream.print(byte)重载,因此需要加宽byte以调用该方法。

JLS 5.1.2

  

对原始类型的19个特定转换称为扩展原语转换:

     
      
  • byte to short,int,long,float或double
  •   
  • ...
  •   

也没有PrintStream.print(short)超载。

下一个最具体的一个是PrintStream.print(int)。这就是那个被调用的那个,因此你看到了字节的数值。

答案 1 :(得分:1)

String.getBytes()使用平台编码返回字符串的编码。结果取决于您运行此计算机。如果平台编码为UTF-8,ASCII或ISO-8859-1或其他一些,则“A”将编码为65(也称为0x41)。

答案 2 :(得分:1)

  

这65相当于A

的Unicode表示

等同于A

的UTF-8表示

等同于A

的ASCII表示

等同于A的ISO / IEC 8859-1表示

A的编码在很多字符编码中都是类似的,并且这些都与Unicode代码点类似。这不是巧合。这是字符集/字符编码标准历史的结果。

  

我的问题是预期返回类型的字节在哪里。

在字节数组中,当然: - )

你(只是)误解了它们。

执行此操作时:

    for (byte b : array1) {
        System.out.print(b);
    }

输出一系列字节作为十进制数字,它们之间没有空格。这与Java区分文本/字符数据和二进制数据的方式一致。字节是二进制的。 getBytes()方法给出字符串中文本的二进制编码(在某些字符集中)。然后,您将格式化并打印二进制文件(一次一个字节)作为十进制数字。

如果您想要更多证据,请将"A"文字替换为包含(比方说)某些中文字符的文字。或者使用\u00ff语法表达的任何大于\u的Unicode字符。