我正在处理一个包含大量变形字符串的文本文件,例如:
VyplÅ<88>te prosÃm pole "jméno
我的编辑说文件编码是latin1。该字符串应该是一个包含一些变音符号的捷克句子,所以难怪它显示错误。我试图在我的编辑器中强制使用utf8和latin2编码,但这没有用。我也尝试使用iconv将文件从latin1转换为utf8或latin2,但这两者都没有帮助。我经常遇到这样的问题,除了手动重写字符串之外,我不知道任何其他解决方案。有没有更好的方法来解决这个问题?
编辑:
这是原始句子:
Vyplňte prosím pole "jméno"
这是发生格式错误的字符串的部分的十六进制转储:
0002640: 6a6d 656e 6f22 5d20 3d20 2744 453a 2056 jmeno"] = 'DE: V
0002650: 7970 6cc5 8874 6520 7072 6f73 c3ad 6d20 ypl..te pros..m
0002660: 706f 6c65 2022 6a6d c3a9 6e6f 222e 273b pole "jm..no".';
EDIT2:
正如deceze所说,上面的句子非常正确。但我刚刚发现了一些奇怪的事情。如果我尝试将文件从utf8转码为utf8(带有iconv),我会在单词Postgebühr
处出现错误:ü
。如果我查看十六进制转储,则此字符表示为\xfc
(十进制252),这是ü
的有效latin1字节编码,但完全无效的utf8字节编码。似乎文件的一部分在latin1中,另一部分在utf8中。这是latin1(可能)中文件的一部分:
0000250: 506f 7374 6765 62fc 6872 273b 0a09 0963 Postgeb.hr';...c
0000260: 6f6e 665b 2277 6166 6572 7322 5d20 3d20 onf["wafers"] =
0000270: 2744 453a 206f 706c c3a1 746b 20c3 273b 'DE: opl..tk .';
当我更多地研究这个时,这甚至看起来并不是有效的latin1因为即使在latin1中它也是乱码(DE: oplátk Ã
而不是DE: oplatky za
)。该文件的这一部分似乎包含一些损坏的文本。
我无法理解这个文件中的编码是如何混淆的。有什么想法吗?
答案 0 :(得分:2)
如果文件应该包含Latin2编码的文本,那么尝试将它从
问题很简单,你的文本编辑器不会自动识别编码,因为单字节Latin *编码在字节级别上看起来都是相同的。如果你的编辑器“告诉”你编码是Latin1,那意味着它当前正在解释该文件为Latin1。显然它有错误。
您需要告诉编辑器将文件视为Latin2(打开为... Latin2,或者您的编辑器为您提供此选择)或将文件从Latin2转换为编辑器正确处理的编码。
为了更好地理解编码,建议您阅读What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text。
响应您发布的十六进制转储:该文件 UTF-8编码。
答案 1 :(得分:0)
Iconv是要走的路,但你必须知道正确的enconding。 Latin2(iso8859-2)只是其中一种可能性,因为欧洲有许多ascii扩展。这应该是什么语言?