python2.7unicode转gbk时报错UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0'

当unicode转gbk编码的时候,代码如下

str=u'\u6e7e\u00a0'
print str.encode("gbk")
注意\u00a0,即空格

在windows的cmd下运行,当遇到\u00a0时,进行unicode转gbk,会报错

UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\xa0’

原因是:
对于Unicode字符,需要print出来的话,由于本地系统是Windows中的cmd,默认codepage是CP936,即GBK的编码,所以python解释器需要先将上述的Unicode字符编码为GBK,然后再在cmd中显示出来。但是由于该Unicode字符串中包含一些GBK中无法显示的字符,导致此时提示“’gbk’ codec can’t encode”的错误的。

注意:不打印,写入文件是不报错的,但不是标准空格,好像是全角空格

解决方法1:

在转换的时候必需进行一些前置动作

str=u'\u6e7e\u00a0'
str=str.replace(u'\xa0', u' ')
print str.encode("gbk")

将’\xa0’替换成u’ ‘空格,这个\xa0就是那个html中的&nbps空格

解决方法2:

在对unicode字符编码时,添加ignore参数,忽略无法无法编码的字符,这样就可以正常编码为GBK了

str=u'\u6e7e\u00a0'
print str.encode("gbk",'ignore')

原文出处:/show_1C7iAoMx7vA.html