[專業]Python讀gbk編碼的xml問題-0806072220
Python讀xml時,如果編碼不是utf-8或utf-16,就出錯,如下:
...
解析這個xml文件代碼如下:
from xml.dom import minidom
f = minidom.parse('f:\\temp\\protocol.xml')
print f.toxml()
出現這個錯誤:
xml.parsers.expat.ExpatError: unknown encoding:
解決辦法:
由于xml協會規定,所有xml解析器均需要支持utf-8和utf-16兩種編碼而不要求別的編碼,所以我估計python提供的xml處理模塊就是不支持gb2312的。而windows下的文件,大部分均為gb2312編碼的,因此處理的時候,就會帶來不方便的地方。
解1:利用UltraEdit等工具,將xml文件轉換成UTF-8的,然后encoding="utf-8"即可
轉換工具如果沒有,用python可以簡單寫一個,比如
(以下代碼轉自 http://tenyears.cn/?cat=6 )
----------
# -*- coding: mbcs -*-
import codecs
f = codecs.open(‘D:\\normal.txt’, ‘rb’, ‘mbcs’)
text = f.read().encode(‘utf-8′)
f.close
f = open(‘d:\\utf8.txt’, ‘wb’)
f.write(text)
f.close()
print text.decode(‘utf-8′).encode(‘gb2312′)
-----------------
解2:xml文件里面不要寫入encoding,保持為gb2312本地編碼,然后程序解析的時候,采用語句
unicode(file('f:\\temp\\a.txt', 'r', 'gb2312').read(),'gb2312').encode('utf-8')
將整個文件轉成utf-8的 String 來處理,處理結束后,利用
unicode(string,'utf-8').encode('gb2312')
換成本地的gb碼,再將結果寫回文件。
另外,python2.4的普通函數處理字符串的時候,好像已經支持各種編碼了。