首页  >  问答  >  正文

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 天前638

全部回复(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
  • 取消回复