返回信息流试了试u'hah' == 'hah',结果为真,u'哈哈' == '哈哈',结果为假,为什么英文为真中文为假啊???
还有decode函数,在setdefaultencoding为utf8后,一个unicode字符串str执行str.decode('utf8')没有报错,当然是decode('gb2312')等等别的编码会报错,但是unicode字符串为什么按照utf8解码没有报错?
这是一条镜像帖。来源:北邮人论坛 / python / #13030同步于 2016/3/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
python 编码问题
jadfi
2016/3/31镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
1) str 和 unicode 是两种不同的类型,本来就不应该放在一起比较,如果硬要放一起比较,Python会将 str 转换成 unicode,然而会得到警告“UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal”,也就是说转换后的unicode并不相等。总之,不要将 unicode 和 str 直接进行比较。
2) default encoding是 utf-8 的时候,所有的 str 都默认是以 utf-8 编码的,当然不能按照 gb2312 去 decode 了。
骚年,还是用 Python3 吧!
1、我感觉按道理是应该做强制转换的,但都转换成unicode应该是相等的呀,难道有什么损失?
2、所有的str是按照utf8编码的,但是我解码的是unicode类型而不是str类型,一个unicode字符串怎么还能decode呢
python2还不是很熟呢,先学学看看
【 在 Chon 的大作中提到: 】
: 1) str 和 unicode 是两种不同的类型,本来就不应该放在一起比较,如果硬要放一起比较,Python会将 str 转换成 unicode,然而会得到警告“UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal”,也就是说转换后的unicode并不相等。总之,不要将 unicode 和 str 直接进行比较。
: 2) default encoding是 utf-8 的时候,所有的 str 都默认是以 utf-8 编码的,当然不能按照 gb2312 去 decode 了。
: 骚年,还是用 Python3 吧!
附议...用Py3吧...
Python2 : str–(decode)–> unicode –(encode)–> str
Python3 : bytes –(decode)–> str –(encode)–> bytes
第一个问题感觉其实是因为英文的编码通用性比较好,但是中文这样的字符在不同平台下编码不一样导致的
第二个decode的问题感觉和Python2内部的实现有关系,你注意下报错的信息就能发现一些细节
顶暖神,被p2虐的死去活来换了p3简直神清气爽!(然而被老师告知实验室的代码环境都是p2.7
【 在 nuanyangyang 的大作中提到: 】
: 别用python2了,请用python3。python2的编码问题很不可理喻
:
发自「贵邮」
【 在 asv000 的大作中提到: 】
: 顶暖神,被p2虐的死去活来换了p3简直神清气爽!(然而被老师告知实验室的代码环境都是p2.7
:
: 发自「贵邮」
你去帮你们实验室改革一下吧。告诉老师同学们Python2.7已经进入维护模式了,再也不会有2.8了,也不会添加新的特性,就连bug,如果不是安全bug也不会修复了。