Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 在字节变量中强制使用Unicode_Java_String_Unicode_Byte_Bytearray - Fatal编程技术网

Java 在字节变量中强制使用Unicode

Java 在字节变量中强制使用Unicode,java,string,unicode,byte,bytearray,Java,String,Unicode,Byte,Bytearray,我最近发现,可以通过以下方式将字符串转换为字节数组: String S = "ab"; byte arr[] = S.getBytes(); 现在,我尝试使用字符串“\u9999”,结果是[63]。我想应该是9999(mod 128)=15,这实际上是我们做字节b=9999得到的。63背后的原因是什么?对于Unicode字符,可以在调用getBytes时指定编码: byte arr[] = S.getBytes("UTF8"); 至于为什么会得到63,在没有参数的情况下调用getBytes将

我最近发现,可以通过以下方式将字符串转换为字节数组:

String S = "ab";
byte arr[] = S.getBytes();

现在,我尝试使用字符串
“\u9999”
,结果是
[63]
。我想应该是9999(mod 128)=15,这实际上是我们做
字节b=9999
得到的。63背后的原因是什么?

对于Unicode字符,可以在调用
getBytes
时指定编码:

byte arr[] = S.getBytes("UTF8");

至于为什么会得到
63
,在没有参数的情况下调用
getBytes
将使用平台的默认编码。字符
\u9999
无法在默认编码中正确表示,因此会转换为
,在ASCII中具有十进制值
63

关于默认字符集。这可能与java文件的编码有关

(在我的机器上,当我编译编码为cp1252的java文件时,
getBytes()
似乎也使用cp1252作为默认字符集。由于cp1252不支持unicode字符,它变成了
字符,即
63
。当我编译编码为UTF-16的java时,
getBytes()
按预期返回数据
0x9999
。)

当此字符串无法在中编码时,此方法的行为 默认字符集未指定。 (来源:)

我的建议是简单地使用
“\u9999.getBytes(StandardCharsets.utf16le)
(或
utf16be
)来获得所需的2字节数组。因此,不需要关心java源代码的编码。数组应该是
{-103,-103}


值为
-103
byte
在内存中表示为
0x99

您说“答案是[63]”是什么意思?什么答案?我的意思是绝对正确。另见: