Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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获取字符的十进制字节表示形式_Java_Unicode_Encoding_Character Encoding_Ascii - Fatal编程技术网

Java获取字符的十进制字节表示形式

Java获取字符的十进制字节表示形式,java,unicode,encoding,character-encoding,ascii,Java,Unicode,Encoding,Character Encoding,Ascii,我有下面的代码,它从字符串s0和s1打印字节;输出结果如下所示: public static void main(String[] args) throws UnsupportedEncodingException { String s0="H\u00ebllo"; String s1="Hëllo"; byte[] bytes=s0.getBytes("ISO8859_1"); //72 -21 108 108 111 //byte[] bytes=s1.ge

我有下面的代码,它从字符串
s0
s1
打印字节;输出结果如下所示:

public static void main(String[] args) throws UnsupportedEncodingException {
    String s0="H\u00ebllo";
    String s1="Hëllo";

    byte[] bytes=s0.getBytes("ISO8859_1"); //72 -21 108 108 111
    //byte[] bytes=s1.getBytes("ISO8859_1"); //72 -61 -85 108 108 111
    //byte[] bytes=s0.getBytes("UTF-8");  //72 -61 -85 108 108 111
    //byte[] bytes=s1.getBytes("UTF-8");  //72 -61 -125 -62 -85 108 108 111
    for (int i=0,  i<bytes.length; i++)  {
        System.out.println(bytes[i]);
    }
}

两者都给出了
UTF-8
。源文件位于Java中的
UTF-8

中,
字节
原语类型为
有符号
,这意味着范围从-128到+127(第一位被认为是数字的符号)

在扩展ASCII和其他8位编码(如ISO-8859-1)中,存在字节值大于127的字符。当作为标准Java
字节打印时,这些将显示为负数


如果使用UTF-8(或另一种Unicode UTF编码),非ASCII字符由2-4个字节表示,并且它们中的每一个都可能“大于127”,因此当您简单地将它们打印为
字节
值时,它们也会显示为负数。

在Java中,
字节
基本类型是
有符号的
,这意味着范围从-128到+127(第一位被认为是数字的符号)

在扩展ASCII和其他8位编码(如ISO-8859-1)中,存在字节值大于127的字符。当作为标准Java
字节打印时,这些将显示为负数


如果您使用UTF-8(或另一种Unicode UTF编码),非ASCII字符由2-4个字节表示,并且它们中的每一个都可能“大于127”,因此当您简单地将它们打印为
字节
值时,它们也将显示为负数。

字节在Java中是有符号的数字,范围为-128到127。第二种情况下有6个数字,因为源文件使用UTF-8编码,并且Java编译器假定平台特定的编码可能不是UTF-8。使用IDE时,请查找与源代码和/或编译器编码对应的设置。使用
javac
进行编译时,请尝试指定
-encoding UTF-8
字节在Java中是有符号的数字,范围在-128到127之间。第二种情况下有6个数字,因为源文件使用UTF-8编码,并且Java编译器假定平台特定的编码可能不是UTF-8。使用IDE时,请查找与源代码和/或编译器编码对应的设置。使用
javac
进行编译时,请尝试在java中指定
-encoding UTF-8

,所有数字类型都是有符号的(而不是无符号的)。请注意,
char
不是数字类型,即使它可以在算术上使用(滥用)


您的编码提供了一个
-21
,它只是Java的
字节
表示
0b11101011
0xEB
在Java中,所有数字类型都是有符号的(与无符号相反)。请注意,
char
不是数字类型,即使它可以在算术上使用(滥用)



您的编码提供了一个
-21
,它只是Java的
字节
表示
0b11101011
0xEB
k

的目的是什么?@Andreas,它是一个更大程序的一部分,出于个人原因需要
k
。还是编辑了帖子。同样,您的源文件存储在UTF-8中,因此
ë
存储为两个字节。您的编译器采用不同的编码,并将UTF-8误读为
ë
,因此当执行代码时,它不知道有关
Hëllo
的任何信息,而只知道
Hëllo
。内存中的字符串被编码为UTF-16,而不是UTF-8。文件编码和内存编码之间存在转换。通过将
字符串
视为字节序列,无法可靠地获得正确的结果。您必须将其视为
char
序列@Markus Benko,但是这个想法说我的源文件是用UTF-8运行的(
-Dfile.encoding=UTF-8
),编译器使用不同的编码吗?
k
的目的是什么?@Andreas,它是更大程序的一部分,出于个人原因需要
k
。还是编辑了帖子。同样,您的源文件存储在UTF-8中,因此
ë
存储为两个字节。您的编译器采用不同的编码,并将UTF-8误读为
ë
,因此当执行代码时,它不知道有关
Hëllo
的任何信息,而只知道
Hëllo
。内存中的字符串被编码为UTF-16,而不是UTF-8。文件编码和内存编码之间存在转换。通过将
字符串
视为字节序列,无法可靠地获得正确的结果。您必须将其视为
char
序列@Markus Benko,但是这个想法说我的源文件是以UTF-8运行的(
-Dfile.encoding=UTF-8
),编译器使用不同的编码吗?为什么235变成了-21?毕竟,第一位是零,这意味着它是一个正数。完成了235->0111011的转换并在此处反转,-21从未出现…这是因为您指定了9位,因为网站向您显示了一个错误,因为235超出了范围。我编辑了这个问题,请解释一下
s0
s1
案例之间的区别?
char
是数字类型。我将坚持使用Java语言规范,而不是您对此的看法。为什么235变成了-21?毕竟,第一位是零,这意味着它是一个正数。完成了235->0111011的转换并在此处反转,-21从未出现…这是因为您指定了9位,因为网站向您显示了一个错误,因为235超出了范围。我编辑了这个问题,请解释一下
s0
s1
案例之间的区别?
char
是数字类型。我将坚持Java语言规范,而不是你对这一点的看法。但是
ë
是Unicode的
U+00EB
,是
0xeb
中的

System.out.println(System.getProperty("file.encoding"));
System.out.println(java.nio.charset.Charset.defaultCharset());