【发布时间】:2013-04-02 06:30:44
【问题描述】:
我在comment 中读到@Esailija 对我的一个问题的回答
ISO-8859-1 是唯一完全保留原始二进制数据的编码,具有精确的字节代码点匹配
我还在@AaronDigulla 的answer 中读到:
在 Java 中,ISO-8859-1(又名 ISO-Latin1)是 1:1 映射
我需要对此有所了解。这将失败(如图所示here):
// \u00F6 is ö
System.out.println(Arrays.toString("\u00F6".getBytes("utf-8")));
// prints [-61, -74]
System.out.println(Arrays.toString("\u00F6".getBytes("ISO-8859-1")));
// prints [-10]
问题
- 我承认我不太明白 - 为什么它没有得到上面代码中的字节?
- 最重要的是,这是在哪里(字节保留行为
ISO-8859-1)指定 - 指向源代码的链接,或者 JSL 会很好。它是唯一具有此属性的编码吗? - 是否与
ISO-8859-1是default default 有关?
另请参阅this question,了解其他字符集的精彩反例。
【问题讨论】:
-
-10 是 0xF6 的以 10 为底的有符号值。试试
byte b = -10; System.out.println(Integer.toHexString(b & 0xFF)); -
@JBNizet :我知道 - 我要问的是引用的“ISO-8859-1 是在 java 中完全保留原始二进制数据的唯一编码” - 这就是我不太了解的得到 - 你给的东西打印
f6-"\u00F6"中包含的字节是什么? [-61, -74] 或 [-10] ? -
呃,你刚才说你知道-10和f6是同一个字节,表示不同。所以 0x00F6 中包含的字节是 0 是基数 16 中的 F6,或有符号基数 10 中的 0 和 -10。
-
@JBNiz :为什么它不打印 [0, -10] - 假设 ISO-8859-1 是字节保留 - 这就是我没有得到的 - 报告的“字节保留”行为
ISO-8859-1在java中的。 -
好的。现在我明白你的意思了。看我的回答。
标签: java character-encoding iso-8859-1