1

我有一堆声明为 encoding="IBM1047" 的 XML 文件,但它们似乎不是:

  • 当使用 iconv 从 IBM1047 转换为 UTF-8 或 ISO8859-1 (Latin 1) 时,它们会导致无法辨认的垃圾
  • file -i <name_of_file> 说“未知的 8 位编码”
  • 当由 XML 解析器解析时,解析器会抱怨序言之前有文本但没有;如果我将 XML 声明中的编码更改为其他内容,则不会发生此错误

找出这些文件的真实编码会很好(我试过上面提到的'file -i'和'enca',但它仅限于斯拉夫语言(文件是法语))。

我几乎无法控制这些文件的生成方式。如果找不到实际的编码,如果我能最终证明这些文件实际上不是 IBM1047,我可能会让生产者对此做点什么。

我该如何证明?

一些特殊字符:

  • 'é' 是 '©'
  • 'à' 是 'ë'
  • 'è' 是 'Û'
  • 'ê' 是 'ª'
4

1 回答 1

0

证明任何类别的数据流以特定方式编码或未编码的唯一方法是,对于该类的至少一个实例,确切地知道流中应该包含哪些字符。如果您对特定测试用例中的(假定是)哪些字符达成一致,则可以计算应该在测试用例的 IBM 1047(或任何其他)编码中的位,并将这些位与这些位进行比较你真的看到了。

当然,对 EBCDIC 数据进行破坏的一种简单方法是,它在使用为其他 EBCDIC 代码页设计的转换表的过程中通过一些 EBCDIC/ASCII 网关。但是,如果您正在使用 EBCDIC 数据,您可能已经知道这一点。

于 2012-09-12T23:45:18.780 回答