Python解析XML是出现编码问题
在python中遇到编码问题是一个非常痛苦的问题。
在使用Python处理XML的问题上,首先遇到的是编码问题。
Python并不支持gb2312,所以面对encoding='gb2312'或encoding='utf8'的XML文件会出现错误。Python读取的文件本身的编码也可能导致抛出异常,这种情况下打开文件的时候就需要指定编码。此外就是XML中节点所包含的中文。Python默认的是解析XML是编码为“UTF-8”和“UTF-16”。所以出现encoding error !问题
我这里呢,处理就比较简单了,只需要修改XML的encoding头部。方法如下:
方法一:
文件 test.xml内容如下
<?xml version=”1.0″ encoding=”gbk”?>
<toplist>
…………….
</toplist>
要用python解析一下文件的内容。
采用minidom解析
xmldoc = minidoc.parse(file_name);
会出现这个错误
xml.parsers.expat.ExpatError: unknown encoding: line 1, column 30
经过查找肯定会发现是minidom不支持gbk编码,那么文件是gbk编码的,肯定是错误的,所以将文件转码为utf-8
(命令 iconv -f gbk -t utf-8 filename -o filename_new)
现在对新的utf-8编码的文件进行解析操作,依旧是报错,这是为什么呢?
原因是<?xml version=”1.0″ encoding=”gbk”?>这个句子在做过,minidom在底层对这个语句进行了识别,也就是不仅仅文件要变成utf-8编码的,而且这里 也要变成<?xml version=”1.0″ encoding=”utf-8″?>。再试验一次,全部ok了
在python中遇到编码问题是一个非常痛苦的问题。
在使用Python处理XML的问题上,首先遇到的是编码问题。
Python并不支持gb2312,所以面对encoding='gb2312'或encoding='utf8'的XML文件会出现错误。Python读取的文件本身的编码也可能导致抛出异常,这种情况下打开文件的时候就需要指定编码。此外就是XML中节点所包含的中文。Python默认的是解析XML是编码为“UTF-8”和“UTF-16”。所以出现encoding error !问题
我这里呢,处理就比较简单了,只需要修改XML的encoding头部。方法如下:
方法一:
文件 test.xml内容如下
<?xml version=”1.0″ encoding=”gbk”?>
<toplist>
…………….
</toplist>
要用python解析一下文件的内容。
采用minidom解析
xmldoc = minidoc.parse(file_name);
会出现这个错误
xml.parsers.expat.ExpatError: unknown encoding: line 1, column 30
经过查找肯定会发现是minidom不支持gbk编码,那么文件是gbk编码的,肯定是错误的,所以将文件转码为utf-8
(命令 iconv -f gbk -t utf-8 filename -o filename_new)
现在对新的utf-8编码的文件进行解析操作,依旧是报错,这是为什么呢?
原因是<?xml version=”1.0″ encoding=”gbk”?>这个句子在做过,minidom在底层对这个语句进行了识别,也就是不仅仅文件要变成utf-8编码的,而且这里 也要变成<?xml version=”1.0″ encoding=”utf-8″?>。再试验一次,全部ok了
