我正在阅读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表示形式。我的问题是,返回类型的字节在哪里。
答案 0 :(得分:4)
没有PrintStream.print(byte)
重载,因此需要加宽byte
以调用该方法。
对原始类型的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字符。