首頁  >  問答  >  主體

python2.7 - python 中文写入文件后乱码

一个很简单的小爬虫程序

    for i in L:
        content = urllib2.urlopen('http://X.X.X.X/cgi-bin/GetDomainOwnerInfo?domain=%s' %i)
        html = content.read()
        with open('domain_test.xml','a') as f:
            f.write(html)
            print html

print 的结果是中文:

<domaininfo strDomain="XXX.com." strOwner="XXX" strDepartment="云平台部" strBusiness="[互联网业务系统 - XXX" strUser="XXX;">

但直接打开xml文本的时候却是乱码:

<domaininfo strDomain="XXX.com." strOwner="XXX" strDepartment="云平台部" strBusiness="[互联网业务系统 - 第三方应用]" StrUser="XXX;">

Windows 7 操作系统,python 2.7

请问一下各位,这个问题如何解决?

黄舟黄舟2740 天前639

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:23:02

    1. 你需要知道內容的編碼方式,並考慮是否要轉換

    2. 你需要用utf-8打開文件,然後寫入

    codecs.open(檔名, 模式[, 編碼[, 錯誤[, 緩衝]]])

    使用給定模式開啟編碼檔案並返回包裝版本
    提供透明的編碼/解碼。預設檔案模式是'r'
    意思是以讀取模式開啟檔案。

    注意包裝版本僅接受
    編解碼器定義的物件格式,即大多數內建解碼器的 Unicode 物件。輸出也依賴編解碼器,通常也是 Unicode。注意 檔案
    始終以二進位模式打開,即使未指定二進位模式也是如此。這樣做是為了避免因為使用 8 位元值進行編碼而導致資料遺失。這意味著在讀取和寫入時不會完成“n”的自動轉換。編碼指定要用於文件的編碼。可以給出錯誤來定義錯誤處理。它預設為
    'strict',這會在發生編碼
    錯誤時引發 ValueError。
    緩衝與內建 open() 函數具有相同的意義。它
    預設為行緩衝。

    雷雷

    回覆
    0
  • 怪我咯

    怪我咯2017-04-18 10:23:02

    試試在檔案開頭加上 # -*- coding: utf-8 -*-

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:23:02

    在檔案開頭加上 #coding:utf-8

    回覆
    0
  • 取消回覆