Python 2.7 解决写入文件的中文乱码问题
2016-04-13 19:09
1156 查看
续:python之xml文件处理的例子-问题描述及解决方法
从一个文件中读入中文字符再写入到另一个文件中,遇到中文乱码问题。学习到一个方法解决这个问题,分享如下。
环境: python 2.7
背景:待读取的xml文件中含有中文字符。 读入这些字符并写入到csv文件中。 用notepad++打开生成的csv文件能正常显示中文,但若用Excel打开,则中文为乱码。此文解决乱码的问题。
准备:准备一个名为test.xml的文件,文件中写几个中文字符即可。
实验:下面是运行成功的代码。
说明1:初始化ReportWriter实例f时调用类的wirteFormat()函数。
说明2:wirteFormat()函数将\xEF\xBB\xBF写到文件开头,指示文件为UTF-8编码。
说明3:用io模块中的open函数,指定以UTF-8格式打开。
说明4:writeFile()函数中指定将value转换为unicode后再调writer函数写入文件。
Python 3 中字符均使用unicode编码,unicode函数不再需要。
结果:用Excel直接打开生成的a.csv文件,中文正常显示,无乱码。
参考:
阮一峰的网络日志 字符编码笔记:ASCII,Unicode和UTF-8
中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
Python 中文 编码
Python中的str与unicode处理方法
Python chardet 字符编码判断
也谈 Python 的中文编码处理
PYTHON-进阶-编码处理小结
Python3.x 中,chr() 和 ord() 默认支持unicode
从一个文件中读入中文字符再写入到另一个文件中,遇到中文乱码问题。学习到一个方法解决这个问题,分享如下。
环境: python 2.7
背景:待读取的xml文件中含有中文字符。 读入这些字符并写入到csv文件中。 用notepad++打开生成的csv文件能正常显示中文,但若用Excel打开,则中文为乱码。此文解决乱码的问题。
准备:准备一个名为test.xml的文件,文件中写几个中文字符即可。
<var>中文</var>
实验:下面是运行成功的代码。
#!/usr/bin/python # -*- coding: UTF-8 -*- #date 2016.04.13 import csv import re import time import io #******************************************** class ReportWriter(): def __init__(self, item, filename): # item is a list to be written into a CSV file self.value = item self.filename = filename self.wirteFormat() #参见说明1 # parameter 'value' need to be str def updateValue(self, value, idx = -1): if idx>=0: self.value[idx] = value#.encode('UTF-8') else: self.value = value#.encode('UTF-8') def wirteFormat(self): fw = io.open(self.filename, 'a', encoding = 'utf-8') fw.write(unicode("\xEF\xBB\xBF", "utf-8")) #参见说明2 def writeFile(self): #print type(self.value) fw = io.open(self.filename, 'a', encoding = 'utf-8') #参见说明3 fw.write(unicode(self.value, "utf-8")) #参见说明4 fw.close() if ( __name__ == "__main__"): filename = 'a.csv' data = '中文' # -1- 在代码文件中定义的包含中文的字符变量没有乱码的问题。 f = ReportWriter(data, filename) #f.writeFile() #去掉前面的注释运行可以看到 data 变量被正确写入到csv文件,无乱码 fr = open('test.xml', 'r') # -2- 打开xml 文件 content = fr.read() # 读取文件内容 print(content) # 打印结果正常,无乱码 f.updateValue(content) # updateValue() 函数用从xml文件中读到的字符更新ReportWriter类的实例f的value变量 f.writeFile() # 接着调用writeFile()函数将从xml文件中读到的字符写入a.csv print('done')
说明1:初始化ReportWriter实例f时调用类的wirteFormat()函数。
说明2:wirteFormat()函数将\xEF\xBB\xBF写到文件开头,指示文件为UTF-8编码。
说明3:用io模块中的open函数,指定以UTF-8格式打开。
说明4:writeFile()函数中指定将value转换为unicode后再调writer函数写入文件。
Python 3 中字符均使用unicode编码,unicode函数不再需要。
结果:用Excel直接打开生成的a.csv文件,中文正常显示,无乱码。
参考:
阮一峰的网络日志 字符编码笔记:ASCII,Unicode和UTF-8
中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
Python 中文 编码
Python中的str与unicode处理方法
Python chardet 字符编码判断
也谈 Python 的中文编码处理
PYTHON-进阶-编码处理小结
Python3.x 中,chr() 和 ord() 默认支持unicode
相关文章推荐
- python安装
- 如何在Python中使用静态变量在计数
- 使用Selenium+firefox抓取网页指定firefox_profile后的问题
- Python虚拟环境安装virtualenv
- python3 字符串与列表常用功能
- python 转 exe -- py2exe库实录
- python笔记 - 高级属性(20160413)
- python 列表、字典的方法
- 用python导入mysql
- 解决Python UnicodeDecodeError: ‘ascii’ codec can’t decode
- Python3.5入门学习记录-函数
- Python -- 字符串大小写转换
- python 基础学习(字典对象,set对象)
- 初学python(对比java语言不同) 第九篇
- python 基础学习(元组,if,for)
- hive+python数据分析入门
- [Python] Python基础字符串
- Python 3.5.1安装lxml
- python 小记2
- 各大机器学习包汇总(python版,持续更新)