Java getBytes()返回Unicode字符数组
我正在阅读getbytes,它从文档中声明它将返回 结果字节数组 但是当我运行下面的程序时,我发现它正在返回Unicode符号数组Java getBytes()返回Unicode字符数组,java,arrays,unicode,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("Defa
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表示。我的问题是,返回类型应为的字节在哪里。没有PrintStream.print(byte)
重载,因此需要扩展byte
来调用该方法
Per:
19基元类型的特定转换称为扩展基元转换:
- 字节到短、int、long、float或double
PrintStream.print(short)
重载
其次是
PrintStream.print(int)
。这就是所调用的,因此您看到的是字节的数值。没有PrintStream.print(byte)
重载,因此需要加宽字节来调用该方法
Per:
19基元类型的特定转换称为扩展基元转换:
- 字节到短、int、long、float或double
没有PrintStream.print(short)
重载
其次是PrintStream.print(int)
。这就是所调用的,因此您可以看到字节的数值。String.getBytes()
使用平台编码返回字符串的编码。结果取决于运行此操作的机器。如果平台编码为UTF-8、ASCII、ISO-8859-1或其他一些,则“a”将被编码为65(也称为0x41)。String.getBytes()
使用平台编码返回字符串的编码。结果取决于运行此操作的机器。如果平台编码为UTF-8、ASCII、ISO-8859-1或其他一些,则“a”将被编码为65(也称为0x41)
这65相当于
它也相当于一个应用程序的UTF-8表示
它也相当于一个
它也相当于ISO/IEC 8859-1中的
碰巧的是,A的编码在很多字符编码中是相似的,并且这些编码都与Unicode码点相似。这不是巧合。这是字符集/字符编码标准历史的结果
我的问题是,返回类型应为的字节在哪里
当然,在字节数组中:-)
你(只是)误解了他们
执行此操作时:
for (byte b : array1) {
System.out.print(b);
}
将一系列字节作为十进制数输出,它们之间没有空格。这与Java区分文本/字符数据和二进制数据的方式一致。字节是二进制的。getBytes()
方法为字符串中的文本提供二进制编码(在某些字符集中)。然后将二进制(一次一个字节)格式化并打印为十进制数
如果你想得到更多的证据,用一个包含(比如)一些汉字的文本替换“A”
文本。或任何大于\u00ff
。。。使用\u
语法表示
这65相当于
它也相当于一个应用程序的UTF-8表示
它也相当于一个
它也相当于ISO/IEC 8859-1中的
碰巧的是,A的编码在很多字符编码中是相似的,并且这些编码都与Unicode码点相似。这不是巧合。这是字符集/字符编码标准历史的结果
我的问题是,返回类型应为的字节在哪里
当然,在字节数组中:-)
你(只是)误解了他们
执行此操作时:
for (byte b : array1) {
System.out.print(b);
}
将一系列字节作为十进制数输出,它们之间没有空格。这与Java区分文本/字符数据和二进制数据的方式一致。字节是二进制的。getBytes()
方法为字符串中的文本提供二进制编码(在某些字符集中)。然后将二进制(一次一个字节)格式化并打印为十进制数
如果你想得到更多的证据,用一个包含(比如)一些汉字的文本替换“A”
文本。或任何大于\u00ff
。。。使用\u
语法表示。您希望此方法返回什么?您刚刚打印了返回数组的每个字节,因此它们肯定在那里。您的期望是什么?“我的问题是返回类型的字节在哪里。”在变量b
中?很不清楚你的代码有什么问题。“字节在哪里”嗯。。。在数组中。您只是误解了在打印该数组的元素时发生的情况。即使没有加宽,您希望打印什么?字节是8位上的有符号整数(从-128到127)。65在我看来似乎是一个有效的字节值。我猜您被使用print()的事实弄糊涂了,所以所有字节都是串联的,它们之间没有任何新行空间。您希望此方法返回什么?您刚刚打印了返回数组的每个字节,因此它们肯定在那里。您的期望是什么?“我的问题是返回类型的字节在哪里。”在变量b
中?很不清楚你的代码有什么问题。“字节在哪里”嗯。。。在数组中。您只是在错误地解释打印元素时发生的事情