如何确定文件是否为IBM1047编码

时间:2012-04-13 06:48:09

标签: encoding xml-parsing

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

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

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

我无法控制这些文件的生成方式;如果我能够确切地证明文件实际上不是IBM1047,那么我可能会让生产者对它做一些事情。

我如何证明?

一些特殊的字符:

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

1 个答案:

答案 0 :(得分:0)

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

当然,EBCDIC数据被破坏的一种简单方法是,它使用为某些其他EBCDIC代码页设计的转换表的方式通过某些EBCDIC / ASCII网关。但是如果您正在使用EBCDIC数据,那么您可能已经知道了。