Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getBytes()返回Unicode字符数组_Java_Arrays_Unicode - Fatal编程技术网

Java 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

我正在阅读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表示。我的问题是,返回类型应为的字节在哪里。

没有
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
中?很不清楚你的代码有什么问题。“字节在哪里”嗯。。。在数组中。您只是在错误地解释打印元素时发生的事情