Ada*_*ent 6 java heuristics utf-8 character-encoding
我负责的是给我正确编码(和或损坏)字符串外部Web服务(UTF-8)是最有可能无论是ISO LATIN或WINDOWS-1252,但现在UTF-8(和或混合物ISO/WINDOWS/UTF-8).可爱的帽子(Â)比比皆是.
我显然无法修复外部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()使用各种编码进行反复操作,并且会看到数据损坏和数据丢失.
我可能误解了错误编码数据的本质,但 PHP 代码对我来说似乎有点矫枉过正。如果您有作为单个字符传递的 UTF-8 字节,您应该能够执行以下操作:
String fix(String s) {
byte[] bytes = s.getBytes(Charset.forName("windows-1252"));
return new String(bytes, StandardCharsets.UTF_8);
}
Run Code Online (Sandbox Code Playgroud)