Encoding 文件编码和变形字符串

Encoding 文件编码和变形字符串,encoding,malformed,Encoding,Malformed,我正在处理一个文本文件,其中包含大量变形字符串,例如: VyplÅ<88>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 6a

我正在处理一个文本文件,其中包含大量变形字符串,例如:

VyplÅ<88>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转码到utf8(使用iconv),我会在一个单词上得到一个错误:
Postgebühr
at character
u
。如果我看一下十六进制转储,这个字符表示为
\xfc
(十进制为252),这是
u
的有效拉丁1字节编码,但完全无效的utf8字节编码。似乎文件的一部分是拉丁文1,另一部分是utf8。以下是部分文件的拉丁文版本(可能是):

当我进一步研究这一点时,这似乎不是有效的拉丁文1,因为即使在拉丁文1中它也是乱码(
DE:oplÃtkÃ
而不是可能的
DE:oplatky za
)。文件的这一部分似乎包含一些损坏的文本


我不明白这个文件中的编码怎么会像那样混在一起。有什么想法吗?

如果文件应该包含拉丁文2编码的文本,那么尝试将其从拉丁文1或类似文本转换过来当然会把事情搞砸

问题很简单,您的文本编辑器无法自动识别编码,因为单字节拉丁*编码在字节级别上看起来完全可以互换。如果您的编辑器“告诉”您编码为拉丁语1,则意味着它当前正在将文件解释为拉丁语1。显然它错了


您需要告诉您的编辑器将文件视为Latin2(打开时为…Latin2,或者您的编辑器如何为您提供此选择),或者将文件从Latin2转换为编辑器正确处理的编码

为了更好地理解编码,我建议您阅读



作为对您发布的十六进制转储的响应:该文件是UTF-8编码的。

Iconv是一种方法,但您必须知道正确的编码。Latin2(iso8859-2)只是其中一种可能性,因为欧洲有许多ascii扩展。这应该是什么语言

“你或者需要告诉你的编辑把这个文件当作拉丁文2”——我已经试过了。“将文件从Latin2转换为编辑器正确处理的编码”-从Latin2转换为utf8没有帮助。然后找出文件中的字节值是什么(使用十六进制编辑器)以及应该包含哪些字符,并尝试找到真正的编码。在这里发布一些示例数据以获得帮助。“应该包含拉丁文2编码的文本”-我已经编辑了我的文章以使其更清晰。我不知道原始编码,我只知道应该有哪些字符(有些带有变音符号)。谢谢,我添加了十六进制转储。如果文件是utf-8编码的,是什么导致垃圾字符出现?应该有什么文本?应该是:Vyplňte proím pole“jméno”,这是utf-8编码的。然后你也可以尝试使用CP1250。
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".';
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 .';