GetBytes()返回负数

时间:2014-03-22 08:35:07

标签: java string

*"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值?

2 个答案:

答案 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)

  1. 有些字节是否定的,因为byte是用Java签名的,就像int s,shortlong s一样。撤消它的最简单方法是使用& 255 - 示例代码:int fixed_byte = original_byte & 255;

  2. ä没有正常的ASCII值,因为ä不是ASCII的一部分。

  3. getBytes不使用ASCII。

  4. 在您的系统上,getBytes似乎使用的是UTF-8。 getBytes在所有系统上都不使用相同的编码。如果您特别需要UTF-8,请使用getBytes(StandardCharsets.UTF_8)

  5. 如果仔细观察,您会注意到ä实际上编码为UTF-8中的两个字节:-61和-92。将它们固定为不是负数后,这些是195和164。

  6. 为什么要使用字节? char可以保存基本多语种平面中的任何字符,包括字符ä。 (如果不是因为历史错误,char可以容纳任何角色。现在修复它已经太晚了。)