我必须解析来自两个不同软件的XML文件。其中一个文件在解析过程中失败。所以我开始调试问题,然后我复制了#34;好文件"将内容粘贴到"坏文件"。但错误仍然存在!我还粘贴了#34;坏文件"内容很好,一切都有效!
我认为这与编码问题有关。
如果XML文件没有声明编码,是否有一些我可能遗漏的元数据?
我在ruby上读取文件时的输出
File.read(Rails.root.join('bad-file.xml'))
\xFF\xFE<\u0000f\u0000i\u0000l\u0000e\u0000>\u0000\r\u0000<\u0000A\u0000L\u0000L\u0000_\u0000I\u0000N\u0000S\u0000T\u0000A\u0000N\u0000C\u0000E\u0000S\u0000>\u0000\r\u0000\r\u0000<\u0000i\u0000n\u0000s\u0000t\u0000a\u0000n\u0000c\u0000e\u0000>\u0000\r\u0000<\u0000I\u0000D\u0000>\u00009\u00005\u00003\u0000<\u0000/\u0000I\u0000D\u0000>\u0000\r\u0000<\u0000s\u0000t\u0000a\u0000r\u0000t\u0000>\u00005\u00000\u00005\u00009\u0000.\u00002\u00006\u00002\u00002\u00000\u00001....
File.read(Rails.root.join('good-file.xml'))
<file>\r\n<ALL_INSTANCES>\r\n\r\n<instance>\r\n<ID>953</ID>\r\n<start>5059.2622016567</start>\r\n<end>5060.2622016567</end>\r\n<code>timer-1sec</code>\r\n<label>\r\n<group>result</group>\r\n<text>Dabang Eindringen SK</text>\r\n</label>\r\n</instance>\r\n</ALL_INSTANCES>\r\n\r\n<ROWS>\r\n<row>\r\n<code>timer-1sec</code>\r\n<R>0</R>\r\n<G>0</G>\r\n<B>0</B>\r\n</row>\r\n</ROWS>\r\n</file>
答案 0 :(得分:1)
前两个字节\xFF\xFE
是一个unicode字节顺序标记 - 它们表示其余数据是UTF16,以小端顺序
如果你这样做
File.read(path, mode: 'r:UTF-16LE')
然后将文件的外部编码设置为该编码。在返回之前,数据被转码为默认的内部编码。您可以通过执行
强制执行utf-8File.read(path, mode: 'r:UTF-16LE:UTF-8')