水仁博客

          上善若水,仁恕載物
          隨筆 - 11, 文章 - 0, 評論 - 4, 引用 - 0
          數據加載中……

          [專業]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的普通函數處理字符串的時候,好像已經支持各種編碼了。


          posted on 2008-06-07 22:22 水仁圭 閱讀(3169) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 武义县| 抚宁县| 巫溪县| 芦溪县| 牙克石市| 南宁市| 元氏县| 莱芜市| 汽车| 厦门市| 定日县| 洮南市| 桐庐县| 广宗县| 图木舒克市| 蒲城县| 古蔺县| 阳东县| 彭泽县| 阿鲁科尔沁旗| 永丰县| 宁晋县| 贵定县| 台州市| 麻阳| 旬邑县| 肥东县| 中宁县| 桃源县| 定兴县| 龙岩市| 平塘县| 常山县| 茶陵县| 清流县| 平度市| 饶平县| 武穴市| 济源市| 岗巴县| 克拉玛依市|