windows系统python3应用pycharm写入txt文件

2017-04-25  本文已影响0人  若即隨風

我有很多的中文样本,在应用jieba中文分词之后,想将分词的结果写入到txt文件中,报了如下错误:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 143: illegal multibyte sequence

于是开始了漫长的排查错误之旅:

1、我首先查看了我要写入数据的数据类型,为str

2、查看python3本身的编码方式,python3中包含decode和encode两种方式,其中decode是将其他字符转化为unicode中间类型,即:解码,而encode是将unicode类型转化为其他字符类型,即:编码。

3、于是,开始了第一次尝试:将str类型编码为utf-8类型,写入到文档中,事实证明写入是没有问题的,且写入的文件是byte型数据,如下:b'\xe5\xb0\x8a........首先这个不是我们想要的中文,只是unicode类型对象,.其次,当我试图再次读取这个文件的时候,我发现这个不可以被解码,查阅资料之后,发现是如下原因:

u ='中文'      #指定字符串类型对象

str = u.encode('utf-8')     #以utf-8编码对u进行编码,获得bytes类型对象

str1 = str.decode('utf-8')      #如果以utf-8的编码对str进行解码得到的结果,将无法还原原来的字符串内容

也就是当我们对字符串进行编码之后,无法还原成原来的字符串内容,所以解码失败

4、于是尝试先对str进行编码,查看结果:代码如下

      for j in a:

               j=j.decode('utf-8')

                f.write('%s'%j)

报错:AttributeError: 'str' object has no attribute 'decode'。。

查阅资料发现:You are trying to decode an object that is already decoded. You have astr, there is no need to decode from UTF-8 anymore.(意思就是str已经是decode之后的结果,那你还要对decode的结果在次decode,显然会报错!!)

5、继续查阅资料,有位大神指出,是我的pycharm 的File中设置IDE Encoding和Project Encoding和window系统默认的encoding编码方式不一样,即python3默认编码和windows10系统的编码方式不一致,于是统一更改为UTF-8(但是python3不是跨平台的么?这个按理说不应该有什么影响吧,事实也证明改这里并未解决我遇到的错误)

for  j  in a:

    f.write('%s'%j)

    f.close()

报错:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 143: illegal multibyte sequence,百思不得其解,郁闷,,于是又开始了新一轮的查阅资料

6、后来发现,在我打开文件时,没有指定打开文件的编码方式,我打开txt文件的源代码如下:

   f=open('E:/Work/data/data.txt','r+')

这里,如果不指定打开方式,window系统默认会以gbk方式打开吧,于是在这里加上指定编码方式:

f=open('E:/Work/data/data.txt','r+',encoding='utf-8')

继续写入文件,success!!ok,困扰了这么久的问题终于解决了。

上一篇下一篇

猜你喜欢

热点阅读