【问题标题】:Busted encoding in XLSX document - what encoding is this?XLSX 文档中的编码被破坏 - 这是什么编码?
【发布时间】:2016-04-21 21:03:26
【问题描述】:

我收到了一份由另一位用户处理过的 XLSX 文档,从不经意间的检查来看,它的编码似乎完全被破坏了。我使用 Excel 2011 打开 XLSX 文件并将文档保存为 Windows CSV 文件,这样我就可以通过它运行脚本并找出它是什么编码。然而,这样做,我只发现自己更加困惑。

0-127 的 ASCII 范围似乎都是正确且可读的。然后我编写了一个脚本来解析整个 CSV 文件,并且只输出具有字节 80ff 的单元格。通过查看各种单元格并填写空白,我相信我找到了以下翻译 - 它们可能并非都是 100% 准确的:

  • e5 ca => 空白
  • cc 5f => ä 和 Bättner 一样
  • cc a4 => ç 和 Jean-François 一样
  • cc a6 => ö 和 Hölzlestr 一样
  • cc a8 => î 和 Jean-Benoît 一样
  • cc a9 => é 和 Dupré 一样
  • cc ac => è 和 Hélène 一样
  • cc b1 => ñ 就像穆尼奥斯一样
  • cc c1 => á 在穆拉和查韦斯中
  • cc d9 => ß 和 Auerstraße 一样
  • cc e4 => É 就像 Émile

此外,前缀cc c4 e5 在数据中出现了多次,并且似乎映射到与cc 相同的事物——例如,cc c4 e5 c1 似乎映射到与@987654338 相同的字符(á) @。

我突然想到,这甚至可能并非都是相同的编码 - 此 XLSX 文档基于在线邮件列表中包含的数据,并且邮件列表的不同数据源可能具有不同的编码。 .问题。

编辑因此,其中一个解决方案是物有所值,其中许多字段似乎是 UTF-8 解释为 Windows-1252 编码为 MacRoman。我能够将 MacRoman 反转为 Windows-1252 并获得有效的 UTF-8 字节序列。但是,这并没有涵盖所有情况...它没有解释cc c4 e5 序列,并且我假设上表中的一种编码是脱基的——cc 5f 在反转时不会变成 ä .但是,我发现实际上有几种编码,例如cc 5f,我认为可能有一两个线索。这是我之前的策略无法解码的两个字节串...

4a 65 74 74 cc c4 e5 f8 cc e2 e5 c0 cc e2 e5 5f

48 cc 5f e5 5f e5 5f cc 5f e5 a6 e5 a8 65 72

5f 出现了很多...

【问题讨论】:

  • 如果有不同的编码问题,它们会出现在源代码中。一个文档中不能有两种不同的编码。首先检查来源。 edit也许您可以在该文件的编辑副本上发布指向公共共享的链接。
  • 一个文档不能有两种不同的编码,但可以有不同的不正确编码的数据 - 文件可能是 ISO8859-1,但您可能在一个文档上有错误编码的 UTF-8 数据行和错误编码...比如说...将 JIS 数据移到另一个中。

标签: excel text unicode encoding character-encoding


【解决方案1】:

其中很多看起来像 Mac 的可能在某些时候涉及,路径类似于 utf-8 -> cp125(2/4) -> mac_roman。

>>> for char in chars[1:]:
    print(char, hexlify(char.encode("utf-8").decode("cp1252").encode("mac_roman")))
...     
ç b'cca4'
ö b'cca6'
î b'cca8'
é b'cca9'
è b'ccac'
ñ b'ccb1'
á b'ccc1'
ß b'ccd9'
É b'cce4'

这无法解释ä,但我确实认为它证实了你的大部分作业可能是正确的。

【讨论】:

  • 这其实有点道理。该数据的来源声称将其编码为 UTF-8,但可能在完成从源到 XLSX 的导出后,Excel 将其视为 Windows-1252。然后我打开 Excel 文档,随后将其导出为 CSV,根据网络上的其他各种来源声称 Excel 在 MacRoman 中执行此操作。
  • 这个反向编码其实很不错,它给了我其他几个我无法推断的字母。但是,我怀疑还有其他不正确的编码是正确的,因为还有其他几个字段没有正确解码。特别是 cc c4 e5 字节似乎没有解码。
猜你喜欢
  • 2011-04-20
  • 2011-04-02
  • 2021-08-15
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2019-10-26
相关资源
最近更新 更多