python编码错误

来源:互联网 发布:装修预算报价软件 编辑:程序博客网 时间:2024/06/06 15:43

错误:

1.UnicodeWarning: Unicode equal comparisonfailed to convert both arguments to Unicode - interpreting them as beingunequal

2.UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)


今天写python代码做情感分析时,遇到了一大堆报编码错误的问题。然后找了一下资源,解决了相应问题。解决办法整理如下:

参考文章1:http://blog.csdn.net/qian_f/article/details/9631257

先了解一下unicode和utf-8的区别。

        unicode指的是万国码,是一种“字码表”。而utf-8是这种字码表储存的编码方法。unicode不一定要由utf-8这种方式编成bytecode储存,也可以使用utf-16,utf-7等其他方式。目前大多都以utf-8的方式来变成bytecode。

 

        其次,Python中字符串类型分为byte string 和 unicode string两种。
        如果在python文件中指定编码方式为utf-8(#coding=utf-8),那么所有带中文的字符串都会被认为是utf-8编码的byte string(例如:mystr="你好"),但是在函数中所产生的字符串则被认为是unicode string。
        问题就出在这边,unicode string 和 byte string 是不可以混合使用的,一旦混合使用了,就会产生这样的错误。例如:
        self.response.out.write("你好"+self.request.get("argu"))
        其中,"你好"被认为是byte string,而self.request.get("argu")的返回值被认为是unicode string。由于预设的解码器是ascii,所以就不能识别中文byte string。然后就报错了。

 


        以下有两个解决方法:
        1.将字符串全都转成byte string。
            self.response.out.write("你好"+self.request.get("argu").encode("utf-8"))
        2.将字符串全都转成unicode string。
            self.response.out.write(u"你好"+self.request.get("argu"))
            byte string转换成unicode string可以这样转unicode(unicodestring, "utf-8")



参考文章2:http://www.codesky.net/article/201301/179545.html

python处理字符串或中文时出现以下错误:

 "UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)"

解决办法,在该python文件的前面加上如下几句,问题得到解决。
import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)



总结:

首先 保证代码开头有#encoding=utf-8 或者#-*- encoding: utf-8 -*-

然后 确保读入的文件的编码形式也是utf-8格式,txt文件改变其文件编码的操作很简单,先打开txt文件,然后点击另存为,最后在保存按钮的旁边改变编码(E)为UTF-8。 其他文件改码方法可以自行百度。

最后 再参考文章2中解决办法的代码复制粘贴到自己的代码中


折腾了很久的中文编码问题,最终在文章2的方法下解决了。






原创粉丝点击