python3编码问题个人理解

Posted Smile杰丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3编码问题个人理解相关的知识,希望对你有一定的参考价值。

#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编码问题个人理解的主要内容,如果未能解决你的问题,请参考以下文章

从python2,python3编码问题引伸出的通用编码原理解释

python2与python3的编码问题

读《Python3 是如何解决棘手的字符编码问题的》的笔记

Python2和Python3正则匹配中文时的编码问题

python3 变量理解 解释器理解 常量理解 用户交互理解

Transformer系列2Transformer结构位置编码的详细解析1(相对位置关系的推导证明与个人理解)