码迷,mamicode.com
首页 > 编程语言 > 详细

python3编码问题个人理解

时间:2017-12-30 19:56:27      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:body   page   codepage   查看   nic   解码   操作   div   log   

#coding=utf-8

a = "你" # 这个字符串是Unicode和 a = u“你”等价
b = b‘\\u4f60‘ #这个表示b是字节串(如果需要显示b的值则 print(b.decode("unicode-escape")) )系统会返回“你”这个值是因为它根据utf-8来给你解码
print(a.encode("unicode-escape")) #这个表示a这个字符串编码成Unicode的字节串 返回值为b‘\\u4f60‘
print(‘\u4f60‘) #等价于 print(a) 等价于 print(‘你‘),系统实际打出时会进行以下操作
print(‘\u4f60‘.encode("utf-8").decode("utf-8"))
#python默认使用utf-8编码,将Unicode的字符转化为utf-8格式,然后在查看codepage表对应的值,显示出“你”这个字符串

以下是搞了很久脑子的问题。

print(b‘\u4f60‘.decode("unicode-escape")) #返回“你”,这里b‘\u4f60‘是Unicode的字节串,所以需要解码成Unicode字符
print(‘\u4f60‘.encode("utf-8").decode("utf-8")) #返回“你” 此处“\u4f60”和“你”等价,将将Unicode编码成utf-8格式,然后根据codepage表解码成“你”

以下因为钻牛角尖了,所以把自己搞混乱了,想通后整理内容如下。

“你”的Unicode字节串是b‘\\u4f60‘
“你”的utf-8的字节串是b‘\xe4\xbd\xa0‘
由于python3是字符串都是Unicode格式,默认编码格式是utf-8
所以print(‘\u4f60‘)会默认将它当成Unicode格式来解码成utf-8的字符串来显示。
所以个人理解是print(‘\u4f60‘)打印给用户查看的返回值计算机做的操作是print(‘\u4f60‘.encode("utf-8").decode("utf-8"))
而print(‘\xe4\xbd\xa0‘)打印乱码是因为在Unicode的codepage表中代表的就是乱码(除非python把字符串都变成utf-8格式,那么就能正常显示“你”)

 

python3编码问题个人理解

标签:body   page   codepage   查看   nic   解码   操作   div   log   

原文地址:https://www.cnblogs.com/smlie/p/8150685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!