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

一个很简单的小爬虫程序

    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() 函数具有相同的含义。它
默认为行缓冲。

雷雷

刘奇

试试在文件开头加上 # -*- coding: utf-8 -*-

大家讲道理

在文件开头加上 #coding:utf-8

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板