*"Hätten Hüte ein ä im Namen, wären sie möglicherweise keine Hüte mehr, sondern Häte."
72 -61 -92 116 116 101 ...*
GetBytes()在char'ä'返回负数(-61,())。
如何获得正常的ascii值?
答案 0 :(得分:12)
GetBytes()在char'ä'返回负数(-61,())。
好getBytes()
将使用平台默认编码,除非您指定编码,您应该这样做。我会正常推荐UTF-8。例如,在Java 7中:
byte[] data = text.getBytes(StandardCharsets.UTF_8);
遗憾的是,Java中的 byte
已签名 - 但您可以认为仅为8位。如果你想看到有效的无符号,只需使用:
int unsigned = someByte & 0xff;
如何获得正常的ascii值?
ASCII中不存在该字符。所有ASCII字符都在U + 0000到U + 007F范围内。
答案 1 :(得分:2)
有些字节是否定的,因为byte
是用Java签名的,就像int
s,short
和long
s一样。撤消它的最简单方法是使用& 255
- 示例代码:int fixed_byte = original_byte & 255;
。
ä
没有正常的ASCII值,因为ä
不是ASCII的一部分。
getBytes
不使用ASCII。
在您的系统上,getBytes
似乎使用的是UTF-8。 getBytes
在所有系统上都不使用相同的编码。如果您特别需要UTF-8,请使用getBytes(StandardCharsets.UTF_8)
。
如果仔细观察,您会注意到ä
实际上编码为UTF-8中的两个字节:-61和-92。将它们固定为不是负数后,这些是195和164。
为什么要使用字节? char
可以保存基本多语种平面中的任何字符,包括字符ä
。 (如果不是因为历史错误,char
可以容纳任何角色。现在修复它已经太晚了。)