繁体   English   中英

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

[英]ISO-8859-1 to UTF-8 in Java

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

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

该字符串被编码为“ ˆç”(ISO-8859-1)。

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

谢谢。

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

仅当首先要使用ISO-8859-1编码文件时,以上内容才适用。 UTF-8能够存储每个unicode字符。 但是ISO-8859-1只能编码unicode字符(西方语言字符)的一小部分。 在我看来,您实际张贴的字符看起来像中文,而且我认为即使不丢失所有内容,也无法在ISO-8859-1中进行编码。

我认为您误诊了问题:

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

好 ...

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

好 ...

该字符串已转换为å“ ˆç”(ISO-8859-1)。

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

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

无论哪种情况,处理此问题的最佳方法是找出导致错误字符编码混合的原因,并加以解决。 也许需要固定XML以指定字符集/编码。 也许,传输机制(例如HTTP请求或响应)需要进行纠正以包括正确的文档编码。

使用作者和读者对输入/输出流进行编码/解码:

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

out.write(yourText);

读者也一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM