python2.7中 str 和 unicode 的转换问题

参考资料:

python2.7 unicode 基础知识讲解官方文档 

python 3 uncode基础知识讲解

python2 支持的所有编码格式

python3 io 视频教程

python2.7:str unicode 详解

缘起:

python2.7 使用spacy进行分句时,spacy的接口要求输入字符串格式是unicode, 我的输入是str, 程序运行时报出编码错误

总结:

先说结论, python2.7  中 str 类型 和 unicode 类型是两码事,str 类型要转换成unicode

需要知道str类型的编码方式 然后   string.decode("编码类型")

比如 读进来 "hello world"的编码方式是utf-8

"hello world".decode("utf-8")   # 现在的类型就是unicode

python 3 中 str 类型就是 unicode类型,两者等价.

"hello world" == u"hello world"   ==> True

"hello world".encode("utf-8")  ==> b"hello world"    # 内存中二进制的表示

字符到数字的编码(ascii、unicode)

ascii 是对常用的美语中常见字符到数字的映射(abcd等 到 0-255之间数字的一个对应关系)

ascii是计算机出现后,人们最开始的编码方式,unicode是对ascii的拓展。

unicode 则是对世界上所有语言的基本符号(比如中文中的 “中”“国”)到数字的一个映射,虽然规模更大, 但原理和ascii是一样的, 都是将语言中的基本组成单元字符("a", "中"等)映射到数字(ascii是直接用十进制数字表示,unicode 则是用16进制数字表示)

unicode到内存中(010111...)的编码

这是一个unicode数字串到内存中映射的过程,有多种做法。

uncode 字符串是一串数字,需要将unicode字符串以一串字节的形式存储在内存中,这个转换规则称为编码(比如,ascii,Latin-1, utf-8, utf-16, gbk)。python2中默认的到内存中的编码方式是ascii, python3 则是utf-8。编码到内存中的都是二进制的形式。

python2.7中编码总是出现问题的原因

python2中, 从文件读进来的字符串,或者我们自己输入的字符串都是内存中对应一定的编码(比如ascii,utf-8)后的str类型,str.decode("utf-8")之后才是unicode类型 , unicode又可以编码成各种类型。

python3 中,文件读进来和输入的字符串一开始都是unicode类型的字符串,具体在内存中的编码方式,由程序员自己设置,当然默认是utf-8编码。这种处理方式更符合人的直觉。

理清楚了这个过程处理python2、3中的编码问题就不是问题了。


你可能感兴趣的:(python2.7中 str 和 unicode 的转换问题)