python编码格式的问题_Python解析XML是出现编码问题

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”?>

…………….

要用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了

给段操作代码

file_xml =

open(file_name,”r”).read()

file_xml = file_xml.replace(‘<?xml version=”1.0″

encoding=”gbk”?>’,'<?xml

version=”1.0″ encoding=”utf-8″?>’)

file_xml = unicode(file_xml,encoding=’gbk’).encode(‘utf-8′)

xmldoc = minidoc.parseString(file_xml)

方法二:

自己在网上找了些资料,写了个脚本,把XML文件转化成你想要的编码就可以了。

#!/usr/bin/env python

import os, sys

import re

def replaceXmlEncoding(filepath, oldEncoding='gb2312',

newEncoding='utf-8'):

f =

open(filepath, mode='r')

content =

f.read()

content =

re.sub(oldEncoding, newEncoding, content)

f.close()

f =

open(filepath, mode='w')

f.write(content)

f.close()

if __name__ == "__main__":

replaceXmlEncoding('./ActivateAccount.xml')

方法三:

在官网和在官方论坛上看到了一些相关的解决办法:

EncodingDecl

::=

S

'encoding' Eq ('"'

EncName

'"' | "'" EncName

"'" )

EncName

::=

[A-Za-z] ([A-Za-z0-9._] | '-')*

In the document

entity, the encoding declaration is part of the XML

declaration. The EncName

is the name of the encoding used.(http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl)

没有太明白,具体就是修改编码的格式声明,扩大了解析时能够识别的格式。

方法四:

最简单的办法就是把XML格式改成解析器默认的格式,但是如果不能改,或者文件太多,一个一个改浪费时间,或者在XML的生成是就默认了其他的格式就很麻烦了一个一个改。所以运用上面办法也可以解决问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值