Python3中如何得到Unicode码对应的中文? - 知乎

文章推薦指數: 80 %
投票人數:10人

从本质上来说,编码和解码就是Python中str和bytes这两种字符串类型之间的互相转换。

... python 3+之后的版本,无论输入输出是什么格式,中间转接的都是Unicode格式。

Unicode(统一码)Python3.x爬虫(计算机网络)JSONPython3中如何得到Unicode码对应的中文?1.已经知道这种情况:[图片]2.在爬取知乎专栏文章时,response的内容是json格式的,print(response.read().dec…显示全部​关注者143被浏览118,505关注问题​写回答​邀请回答​好问题​1条评论​分享​16个回答默认排序知乎用户​144人赞同了该回答先检查text是什么类型如果type(text)isbytes,那么text.decode('unicode_escape')如果type(text)isstr,那么text.encode('latin-1').decode('unicode_escape') 发布于2015-05-3122:20​赞同144​​36条评论​分享​收藏​喜欢收起​石溪​​数学话题下的优秀答主​关注9人赞同了该回答也欢迎关注我的知乎账号@石溪,将持续发布机器学习数学基础及Python数据分析编程应用等方面的精彩内容。

我从Python字符串的编码和解码的角度来说说这个问题。

字符编码对于理解非英语字符的有关内容非常有帮助。

从本质上来说,编码和解码就是Python中str和bytes这两种字符串类型之间的互相转换。

str包含一个encode方法,使用特定编码将该字符串其转换为一个bytes,这称之为编码。

bytes类包含了一个decode方法,也接受一个编码作为单个必要参数,并返回一个str,这称之为解码。

这种转换操作是显式的操作,且必须根据数据被编码时采用的编码类型进行解码。

首先说说编码,即将unicode的str文本字符串转换为bytes的字节字符串,可以显式的传入指定编码(一般来说采用utf-8编码),或使用平台的默认编码。

s='π排球の' b1=s.encode('utf-8') b2=s.encode() print(b1) print(b2) b'\xcf\x80\xe6\x8e\x92\xe7\x90\x83\xe3\x81\xae' b'\xcf\x80\xe6\x8e\x92\xe7\x90\x83\xe3\x81\xae'那么我们看看,在不写编码的时候,平台默认的编码方式到底是什么importsys print(sys.platform) print(sys.getdefaultencoding()) win32 utf-8可以看出我这个平台默认选择的就是utf-8编码方式。

那对应的,再来谈谈decode解码方法将bytes类型字符串转换成str类型的unicode文本字符串也是一样,要么指定编码参数,要么使用平台的默认参数。

这个例子中,我们要操作的字节字符串b是通过utf-8编码方式对文本字符串'π排球の'编码而形成的。

b=b'\xe6\x8e\x92\xe7\x90\x83' s1=b.decode(encoding='utf-8') s2=b.decode() s3=b.decode(encoding='latin-1') print(s1) print(s2) print(s3) 排球 排球 排球从结果中我们可以看出,我们利用utf-8对字节字符串进行解码,可以获得正确的汉字字符串。

而值得注意的是,最后一行代码想通过latin-1解码字节字符串,由于字节字符串是通过utf-8编码形成,因此这样解码形成得到的只能是乱码。

希望从这个角度,有助于大家对于获取中文有了更好的理解。

关于Python编程和数据分析更全面的内容,欢迎关注我在CSDN上的专栏《python数据分析编程基础》。

当然还有《机器学习中的数学-全集》系列专栏,欢迎大家阅读,配合食用,效果更佳~有订阅的问题可咨询微信:zhangyumeng0422编辑于2021-06-0114:57​赞同9​​2条评论​分享​收藏​喜欢收起​



請為這篇文章評分?