【发布时间】:2012-12-02 21:03:02
【问题描述】:
我正在处理一个外部 Web 服务,它给我错误编码(和或损坏)的字符串 (UTF-8),这些字符串很可能是 ISO LATIN 或 WINDOWS-1252,但现在是 UTF-8(和或ISO/WINDOWS/UTF-8 的混合物)。可爱的 A 帽子 (Â) 比比皆是。
我显然无法修复外部 Web 服务如何存储其字符串,从而导致信息丢失。因此,我所知道的 100% 翻译的希望是不可能的。
但我希望有人用 Java 编写了一个启发式字符映射库(不太可能有人会键入 A 帽子)。
如果不是我想我可以移植这些家伙的 PHP 代码:https://stackoverflow.com/a/3521340/318174
更新和解释: 像@VGR 这样的简单转换将不起作用。我没有原始字节。数据在端点转换不正确(SOAP 服务器可能getBytes(/*with out correct encoding*/) 已完成,或者数据可能以不正确的格式存储)。当您在 Java 中将字节转换为字符串时,除非编码在任何地方都相同,否则不会保留数据。如果您想到ASCII UTF-8 之类的东西,这很容易理解。使用Windows-1252 或ISO Latin 会更复杂,因为数据不会丢失但经常混淆。那是因为这些编码可以是两个字节,而不是UTF-8 的子集。
如果您不相信我,您可以尝试使用各种编码来回执行getBytes(),并且会看到数据损坏和数据丢失。
【问题讨论】:
-
我不应该打扰我,但是当有人投票结束而不写评论时,我总是很烦。
标签: java utf-8 character-encoding heuristics