[英]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.