python2.7 - python 中文写入文件后乱码
黄舟
黄舟 2017-04-18 10:21:02
0
3
679

一个很简单的小爬虫程序

    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

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(3)
Ty80
  1. 你必要知道コンテンツのコード方式、并検討要转换

  2. 你必要用utf-8打开文件,その後写入

codecs.open(ファイル名, モード[, エンコード[, エラー[, バッファリング]]])

指定されたモードを使用してエンコードされたファイルを開き、ラップされたバージョンを返します
透過的なエンコード/デコードを提供します。デフォルトのファイル モードは「r」です
、ファイルを読み取りモードで開くことを意味します。

注: ラップされたバージョンは、コーデックによって定義されたオブジェクト形式 (つまり、ほとんどの組み込みコーデックの Unicode オブジェクト) のみを受け入れます。出力もコーデックに依存し、通常は Unicode になります。注: バイナリ モードが指定されていない場合でも、ファイル
は常にバイナリ モードで開かれます。これは、
8 ビット値を使用したエンコードによるデータ損失を避けるために行われます。これは、読み取りおよび書き込み時に「n」の自動変換が行われないことを意味します
。エンコーディングは、ファイルに使用されるエンコーディングを指定します。
エラー処理を定義するためにエラーを指定することもできます。デフォルトは
「strict」です。これにより、エンコードエラーが発生した場合に ValueError が発生します。
バッファリングは、組み込みの open() 関数と同じ意味を持ちます。
デフォルトでは行バッファリングされます。

リーリー

いいねを押す +0
刘奇

ファイルの先頭に# -*- coding: utf-8 -*-

を追加してみてください
いいねを押す +0
大家讲道理

ファイルの先頭に #coding:utf-8 を追加します

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート