【发布时间】:2013-02-06 03:30:36
【问题描述】:
这是我的问题;我有一个已转换为字节数组的 InputStream,但在运行时我不知道 InputStream 的字符集。我最初的想法是在 UTF-8 中做所有事情,但我发现编码为 ISO-8859-1 并具有外来字符的流存在奇怪的问题。 (那些疯狂的瑞典人)
这是有问题的代码:
IOUtils.toString(inputstream, "utf-8")
// Fails on iso8859-1 foreign characters
为了模拟这个,我有:
new String("\u00F6")
// Returns ö as expected, since the default encoding is UTF-8
new String("\u00F6".getBytes("utf-8"), "utf-8")
// Also returns ö as expected.
new String("\u00F6".getBytes("iso-8859-1"), "utf-8")
// Returns \uffff, the unknown character
我错过了什么?
【问题讨论】:
-
如果您不知道
InputStream中编码的(表面上的)字符的编码,则无法将其转换为字符。就是这么简单。而且...为什么您会期望编码为 ISO-8859-1,然后从 UTF-8 解码适用于任意字符? -
Nit:
new String("\u00F6")具有预期的值与编码无关 .. -
在运行时确定编码是
Content-Type标头及其各自的charset参数存在的原因 -
这不仅仅是一个瑞典字母,也是一个德语变音符号。 :)
-
要特别清楚,是
"utf-8"arg(在new String("\u00F6".getBytes("iso-8859-1"), "utf-8")中)导致问题 - 调用System.out.println(new String("\u00F6".getBytes("iso-8859-1")));会很好地打印ö
标签: scala utf-8 character-encoding iso-8859-1