1

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

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

该字符串被编码为 哈甦那 (ISO-8859-1)。

我如何将它编码回哈瓦那?考虑到 Java 中的所有字符串都是 UTF-16。服务 B 必须将其比较为哈瓦那而不是 哈甦那。

谢谢。

4

3 回答 3

5

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

只有首先在 ISO-8859-1 中对文件进行编码是有意义的,上述情况才是正确的。UTF-8 能够存储每个 unicode 字符。但 ISO-8859-1 只能编码一小部分 unicode 字符(西方语言字符)。您发布的字符在我看来就像中文,而且我认为在 ISO-8859-1 中对它们进行编码甚至都不可能丢失所有内容。

于 2012-05-28T06:29:02.377 回答
2

我认为您误诊了问题:

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

好的 ...

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

好的 ...

该字符串被转换为 哈甦那 (ISO-8859-1)。

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

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

无论哪种情况,解决此问题的最佳方法是找出混淆了错误字符编码的原因,然后修复它。也许需要修复 XML 以指定字符集/编码。或许,需要更正传输机制(例如 HTTP 请求或响应)以包含正确的文档编码。

于 2012-05-28T07:36:10.557 回答
0

使用 writer 和 reader 编码/解码您的输入/输出流:

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

out.write(yourText);

读者也一样。

于 2012-05-28T06:34:10.100 回答