当前位置: 首页 > 后端技术 > Python

python写入csv汉字乱码问题,encoding='utf-8'无效或乱码——吕江民日报随笔

时间:2023-03-26 15:53:04 Python

我正在处理python写入csv汉字乱码问题。我尝试了各种方法,但我无法弄清楚。网上找到最常用的方法是1.encoding='utf-8':invalidwithopen('data4.csv','a',encoding='utf-8',newline='')ascsvfile:fieldnames=(['id','name','age'])writer=csv.DictWriter(csvfile,fieldnames=fieldnames)writer.writerow({'id':'10005','name':'张伟','age':'32'})2.encoding='utf-8-sig':effectivewithopen(filename,'a',newline='',encoding='utf-8-sig')asf:#Chineserequired设置为utf-8格式f_csv=csv.writer(f)f_csv.writerow(('city','date','weather','wind','temperature','摄氏度'))#头信息f_csv.writerows(数据)3。先转码后存储:无效的data.decode('utf-8').encode('gbk')4。甚至直接用gbk编码写:invalidf=codecs.open("xx.csv",'wb',"gbk")writer=csv.writer(f)writer.writerow(["客户名称","行业类型","客户联系方式","职位","联系方式","E-mail","地址"])到现在汉字还是乱码,我什至开始怀疑是不是我的excel软件坏了,我我在用wps,wps需要修改编码方式吗?.WPS:你在想什么,我糖糖WPS怎么能让你随意转换代码,我不是Notepad++,我是贵族办公室!打开csv源码,发现dialect="excel"反思一下,是不是csv太Low了,所以成功了!!!完全不敢码字,赶紧贴出来,以防有新手朋友摆渡翻船。拿走不谢...writer=csv.DictWriter(csvfile,fieldnames=fieldnames,dialect="excel")贴上源码:classDictWriter:def__init__(self,f,fieldnames,restval="",extrasaction="raise",dialect="excel",*args,**kwds):self.fieldnames=fieldnames#字典的键列表self.restval=restval#如果extrasaction.lower()不在("raise","忽略"):raiseValueError("extrasaction(%s)mustbe'raise'or'ignore'"%extrasaction)self.extrasaction=extrasactionself.writer=writer(f,dialect,*args,**kwds)defwriteheader(self):header=dict(zip(self.fieldnames,self.fieldnames))self.writerow(header)def_dict_to_list(self,rowdict):如果self.extrasaction=="raise":wrong_fields=rowdict.keys()-self.fieldnames如果wrong_fields:raiseValueError("dictcontainsfields不在字段名中:"+",".join([repr(x)forxinwrong_fields]))return(rowdict.get(key,self.restval)forkeyinself.fieldnames)defwriterow(self,rowdict):returnself.writer.writerow(self._dict_to_list(rowdict))defwriterows(self,rowdicts):returnself.writer.writerows(map(self._dict_to_list,rowdicts))吃完发现是python引起的缓存,其实encoding='utf-8-sig'是有效的,但是当时经过多次测试没有生效,缓存错误,dialect默认值为"excel",不用修改