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

Encoding 如何确定文件是否为IBM1047编码,encoding,xml-parsing,Encoding,Xml Parsing,我有一堆XML文件声明为encoding=“IBM1047”,但它们似乎不是: 当使用iconv将IBM1047转换为UTF-8或ISO8859-1(拉丁语1)时,会产生无法识别的垃圾 文件-我说“未知8位编码” 当由XML解析器解析时,解析器会抱怨序言前有文本,但没有;如果将XML声明中的编码更改为其他内容,则不会发生此错误 找到这些文件的真正编码会很好(我尝试了上面提到的'file-I'和'enca',但仅限于斯拉夫语(文件是法语的)) 我几乎无法控制这些文件是如何产生的;除了找到实际的

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

  • 当使用iconv将IBM1047转换为UTF-8或ISO8859-1(拉丁语1)时,会产生无法识别的垃圾
  • 文件-我说“未知8位编码”
  • 当由XML解析器解析时,解析器会抱怨序言前有文本,但没有;如果将XML声明中的编码更改为其他内容,则不会发生此错误
找到这些文件的真正编码会很好(我尝试了上面提到的'file-I'和'enca',但仅限于斯拉夫语(文件是法语的))

我几乎无法控制这些文件是如何产生的;除了找到实际的编码之外,如果我能确凿地证明这些文件实际上不是IBM1047,我可能会让制作人对此做些什么

我如何证明它

一些特殊字符:

  • “é”是“)”
  • “a”是“ë”
  • è是Û
  • ê是ª

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

当然,EBCDIC数据被篡改的一种简单方法是,它沿着使用为其他EBCDIC代码页设计的翻译表的路径通过某个EBCDIC/ASCII网关。但如果您使用的是EBCDIC数据,您可能已经知道了这一点