Java中的ISO-8859-1到UTF-8

时间:2012-05-28 06:21:11

标签: java encoding character-encoding

包含哈瓦那(UTF-8)的XML被发送到服务A.

服务A将其发送给服务B.

该字符串被编码为å“ç”|é,£(ISO-8859-1)。

如何将其编码回哈瓦那?考虑到Java中的所有字符串都是UTF-16。服务B必须将其比作哈瓦那不是å“ç”|é,£。

感谢。

3 个答案:

答案 0 :(得分:5)

当您阅读文本文件时,您必须使用用于创建文件的实际编码来读取它。如果指定了适当的编码,则会在内存中获得正确的字符。因此,如果两个版本(UTF-8编码和ISO-8859-1)中存在相同的文件(语义上),则使用UTF-8读取第一个文件,使用ISO-8859-1读取第二个文件将导致完全相同记忆中的人物。

只有在首先在ISO-8859-1中对文件进行编码才有意义。 UTF-8能够存储每个unicode字符。但ISO-8859-1只能编码一小部分unicode字符(西方语言字符)。你发布的字符对我来说看起来像中文,我不认为在ISO-8859-1中编码它们甚至不会失去一切。

答案 1 :(得分:2)

我认为你误解了这个问题:

  

包含哈瓦那(UTF-8)的XML被发送到服务A.

好的......

  

服务A将其发送给服务B.

好的......

  

该字符串已转换为å“ç”|é,£(ISO-8859-1)。

这不正确。该字符串尚未“转换”。相反,它已使用错误的字符编码进行解码。具体来说,它看起来非常像UTF-8编码的字节,并假设它们是ISO-8859-1编码,并相应地解码它们。

你可以解开这个吗?这取决于错误解码首次发生的地方。如果它发生在服务B中,那么您应该能够将数据源重新标记为UTF-8,然后正确解码。另一方面,如果第一次错误解码发生在服务A中,那么你可能会失去运气。错误的解码可能导致数据丢失,因为未识别的代码被其他一些字符替换。如果发生这种情况,原始数据将永远消失。

在任何一种情况下,解决这个问题的最佳方法是弄清楚错误的字符编码混淆了什么,然后解决这个问题。可能需要修复XML以指定charset / encoding。也许,需要纠正传输机制(例如HTTP请求或响应)以包括适当的文档编码。

答案 2 :(得分:0)

使用编写器和阅读器对输入/输出流进行编码/解码:

String yourText = "...";
InputStream yourInputStream = ...;
Writer out = new OutputStreamWriter(youInputStream, "UTF-8");

out.write(yourText);

读者也一样。