UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 46:illegal multibyte seque

1、 最近使用python写入文件时,出现了以下的错误:python

可是content的内容是unicode编码,不知道怎么和gbk扯上了关系,对content使用encode()和decode(),用gbk,utf-8,gb2312各类编码解码都没有效果;json

在网上查找资料,看到一篇文章关于这个的说法:http://blog.csdn.net/xiaoyi_zhang/article/details/51675099windows

结论是:编码

1.‘gbk’ codec can’t encode character :说明是将Unicode字符编码为GBK时候出现了问题,多是自己Unicode类型的字符中,包含了一些没法转换为GBK编码的一些字符;spa

2. gbk没法转换'\xa0'字符,因此在转换前须要将“\xa0”替换掉;使用string.replace(u'\xa0', u' ');.net

我在上述代码中使用:code

self.file.write(content.replace(u'\xa0', u''))

 结果有效,没有报错;blog

另一种方法,在gbk解码时忽略掉不能解码的数据:utf-8

 

self.file.write(content.encode("gbk", 'ignore').decode("gbk", "ignore"))

可是总以为这种方法是在回避问题,后来突发灵感,这是在文件写入的时候报的错误,而万恶的windows打开文件默认是以“gbk“编码的,可能形成不识别unicode字符,因而作了以下的修改:unicode

self.file = open('biaobai.json', 'w', encoding="utf-8")
self.file.write(content)

结果OK!

相关文章
相关标签/搜索