Python在向CSV文件写中文时乱码的处理办法
前言
python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode、decode。
当list、tuple、dict里面有中文时,打印出来的是Unicode编码,这个是无解的。
对中文编码纠结的建议尽快换python3吧,python2且用且珍惜!
csv中文乱码
1.open打开csv文件,用writer写入带有中文的数据时
- writer写入单行
- writers写入多行
# coding:utf-8
import csv
f = open("xieru.csv", 'wb')
writer = csv.writer(f)
# 需要写入的信息
data = ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"]
writer.writerow(data) # 写入单行
# writer.writerows(datas) # 写入多行
f.close()
2.打开csv文件,发现写入的中文乱码了

编码与解码
1.中文乱码问题一直是python2挥之不去的痛,这里先弄清楚乱码原因:
- python2本身内部代码的编码有str和unicode两种编码
- 然而文件写入到windows系统时候,windows上的是gb2312编码
所以就导致了乱码问题
2.先把python里面的中文字符串decode成utf-8,再encode为gbk编码
data.decode('utf-8').encode('gbk')
3.如果是读取csv文件的话,就反过来:
data.decode('gbk').encode('utf-8')
解决方案
1.方案一:对字符串转换编码(这个太麻烦了,不推荐)
# coding:utf-8
import csv
f = open("xieru1.csv", 'wb')
writer = csv.writer(f)
# 需要写入的信息
data = ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"]
a = []
for i in data:
a.append(i.decode("utf-8").encode("gbk"))
writer.writerow(a) # 写入单行
# writer.writerows(datas) # 写入多行
f.close()
2.方法二:用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode (推荐)
# coding:utf-8
import csv, codecs
import sys
reload(sys)
sys.setdefaultencoding('utf8')
f = codecs.open("xx.csv", 'wb', "gbk")
writer = csv.writer(f)
writer.writerow(["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"])
# 多组数据存放list列表里面
datas = [
["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
]
writer.writerows(datas)
f.close()
从悠悠处搬过来的。
Python在向CSV文件写中文时乱码的处理办法的更多相关文章
- Mysql 导入CSV文件,中文内容乱码问题
项目中用到含有中文字段的数据CSV文件,导入Mysql数据中发现中文内容乱码. 分析原因:因为数据库字符编码问题引起. [1]创建utf-8字符集数据库 CREATE DATABASE db_name ...
- PHP生成UTF-8编码的CSV文件用Excel打开乱码的解决办法
什么是BOM? 在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中.UCS规范建 ...
- python在处理CSV文件时,字符串和列表写入的区别
概述 Python在处理CSV文件时,如果writerow的对象是<type 'unicode'>字符串时,写入到CSV文件时将会出现一个字符占一个单元格的情况: 但是将字符串转换为列表类 ...
- python中操作csv文件
python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...
- Python源码文件中带有中文时,输出乱码
Python源码文件中带有中文时,文件头应加注释: #!/usr/bin/env python # -*- coding: utf-8 -*- 第一行注释是为了告诉Linux/OS X系统,这是一个P ...
- Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
Java ZIP压缩和解压缩文件(解决中文文件名乱码问题) 学习了:http://www.tuicool.com/articles/V7BBvy 引用原文: JDK中自带的ZipOutputStrea ...
- jquery ajax 返回值 中文时乱码或变成问号解决方法
转载自jquery的 ajax返回值为中文时乱码解决方法 用jquery的ajax,遇到个问题,服务器端从数据库取到的数据没有出现中文乱码问题(日志打出来是没有乱码的),但是异步传到客户的时候却出现了 ...
- 用c#读取文件内容中文是乱码的解决方法:
用c#读取文件内容中文是乱码的解决方法: //方法1: StreamReader din = new StreamReader(@"C:\1.txt", System.Text.E ...
- Jmeter读取CSV文件,请求参数乱码
Jmeter读取CSV文件,请求参数乱码 1.修改本地配置文件,jmeter.properties,修改以下配置项 sampleresult.default.encoding=UTF-8 重启Jmet ...
随机推荐
- mof提权原理及其过程
mof提权的原理: mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就 ...
- Extjs DateField Bug 当format为年月'Y-m',在当前月(30、31号)选择其他偶数月会乱跳的问题解决方案
Ext.form.WMDateField = Ext.extend(Ext.form.DateField, { safeParse : function(value, format) { if (/[ ...
- [每天一个Linux小技巧] 查看时钟源精度
$ dmesg | grep clock [0.000000] OMAP clocksource: GPTIMER1 at 24000000 Hz [0.000000] sched_clock: 3 ...
- UCOS2系统内核讲述(二)_初始化调用函数
Ⅰ.写在前面 学习本文之前可以参看我前面的文章: UCOS2_STM32F1移植详细过程(汇总文章) UCOS2系统内核讲述(一)_总体描述 还是按照上一篇文章的思维(从外到内),本文(结合源代码)进 ...
- 浅谈Facebook的服务器架构(组图)
导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注.CSDN博主yanghehong在他自己最新的一篇博客< Fa ...
- sqlServer的主键只能自增不能手动增加
1. 2.找到相应的表,找到表设计.
- 在项目中使用JMail发送邮件
1.添加JMail组件:在vs的解决方案资源管理器中,右键添加引用,选择浏览,选择jmail.dll文件,在Bin文件夹中就可以看到添加的JMail组件. 2.注册JMail组件:开始-->运行 ...
- Linux中安装配置hadoop集群
一. 简介 参考了网上许多教程,最终把hadoop在ubuntu14.04中安装配置成功.下面就把详细的安装步骤叙述一下.我所使用的环境:两台ubuntu 14.04 64位的台式机,hadoop选择 ...
- CONTEST23 2014xmoi邀请赛(被pj虐哭)
http://www.luogu.org/contest/show?tid=23 表示被普及的虐瞎了T_T_T_T_T_T_T_TT_T_T_T_T_T_T_T_T 33名100多分滚粗 各种贪心神题 ...
- SharePoint Survey WebPart 调查 Web部件
SharePoint Survey WebPart 调查 Web部件 Web部件下载地址 点击此处下载. 安装激活Web部件 过程简单此处省略. 项目描写叙述 调查是SharePoint中协同门户的一 ...