我最近遇到了几个破坏的UTF-8字符串,这些字符串转换为我认为是ISO-Latin-1的字符串,我想知道是否有一些工具可以用来自动转换回来,因为没有信息被实际销毁,实际上没有任何比特丢失。
基本上这样的事情会采用一系列字符并显示如果相同的位显示为utf-8或其他编码,它们将会是什么样的。这样的工具存在吗? (我知道自己创建一些东西很容易,或者甚至只是手动完成它,所以如果真的没有,我可能会这样做。)
澄清:我遇到的具体情况是,在特定论坛上,文本编辑器允许使用utf-8字符,但论坛本身会显示与utf-8字符的各个字节对应的字符。
对于字符U + 0000到U + 007F,它是完全相同的字符,但是:
依旧......
所以“ ”实际应该显示为字符U + 2xy6,(x是' '的中间4位,y是' '加上'10'的最后2位。)
虽然我仍然无法弄清楚U + 0080和U + 00BF' '之间究竟有哪些字符。
我要做的是获取所有UTF-8字符串的字符的ISO-Latin-1位值,将它们连接在一起,并将结果位序列解释为包含UTF-8编码字符。
答案 0 :(得分:0)
UTF8 - >不幸的是,拉丁1是有损的。 UTF8解析为latin1 - > UTF8不是。我认为这是你的情况。 如果是这样,那么你可以在linux上反向像:
iconv -f utf8 -t iso-8859-1 < bad.file.latin1 > good.file.utf8
如果中间转换是像cp1252那样有损耗的话 然后这些过程更加复杂,需要一些东西 喜欢详见:
答案 1 :(得分:0)
很抱歉地说,但这并没有多大意义。 :)
场景1:像“Héllöwörld”这样的字符串,包含UTF-8和Latin1中有效的字符,从UTF-8正确转换为Latin1:没问题。你现在只需要在Latin1中解释它。
场景2:像“Hello世界”这样的字符串,其中包含以UTF-8有效但在Latin1中无效的字符,已正确地从UTF-8转换为Latin1:在这种情况下,字符在Latin1中无法表示的可能已被?
取代,即字符串现在是“Hello ??”,你无能为力。
场景3:像“Héllö世界”这样的字符串,包含任何类型的字符并保存为UTF-8,从假定的Latin1转换为UTF-8。这意味着字符被误解,但现在正确编码为UTF-8:“Héllöä¸ç”。在这种情况下,您可以反转编码UTF-8→Latin1并将结果解释为UTF-8以获取原始文件。
场景4:像“HéllöWörld”这样的字符串,其中包含Latin1字符并保存为Latin1,被误解为UTF-8,然后保存为UTF-8,在这种情况下它现在是“H ll W rld”。此字符串现在无法恢复。
发生的事情有很多种可能的组合,如果没有更多的信息,就不可能准确地告诉你能做什么或不做什么。首先,确保 你 正在正确解释字符串,这不仅仅是显示问题。
你在那里看到“ ”的事实表明你试图将某些东西解释为UTF-8,但是UTF-8解码器无法理解这些字符并用“ ”代替它们。这是你现在的错,数据很好,或情况4。