【分享】Python – 了解bytes、str与unicode的区别
2018-01-19 11:02
621 查看
链接地址: 【分享】Python – 了解bytes、str与unicode的区别Python的字符串编码很容易把人搞混,分享一篇文章,用来解释python 2.x 与 3.x的编码。Python3有两种表示字符序列的类型:bytes和str。前者的实例包含原始的8位值,后者的实例包含Unicode字符。Python2也有两种表示字符序列的类型,分别叫做str和Unicode。与Python3不同的是,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。想了解什么是bytes和Unicode,可以参考这里:Unicode与bytes有何区别?一般来说,Unicode 只是一个“字符集”,它给每一个处于此字符集中的字符给予了一个编号。比如“我”,是 U+6211。然后 Unicode 本身并不指定这个 U+6211 应该是什么编码什么字节序存储和传输,那么就有了编码的这一概念。常见的比如 UTF-8、UTF-16 (LE)、UTF-16 (BE) 编码等。可能这里还会涉及到使用 BOM 来指定字节序的问题。那么当编码一定,字节序一定的时候,存储结果是肯定要落实到字节(Bytes)上来的。比如“我”字,U+6211,以 UTF-8 编码(过程略),结果就是 E6 88 91 这三个字节。存储、读取或者传输的时候,见到的就是 E6 88 91。可能还会见到 BOM - EF BB BF 在最前面。把Unicode字符表示为二进制数据(也就是原始8位值)有许多种办法。最常见的编码方式就是UTF-8。但是,Python3的str实例和Python2的unicode实例都没有和特定的二进制编码形式相关联。要想把Unicode字符转换成二进制数据,就必须使用encode方法。要想把二进制数据转换成Unicode字符,则必须使用decode方法。编写Python程序的时候,一定要把编码和解码操作放在界面最外围来做。程序的核心部分应该使用Unicode字符类型(也就是Python3中的str、Python2中的unicode),而且不要对字符编码做任何假设。这种办法既可以令程序接受多种类型的文本编码(如Latin-1、Shift JIS和Big5),又可以保证输出的文本信息只采用一种编码形式(最好是UTF-8)。由于字符类型有别,所以Python代码中经常会出现两种常见的使用情境:开发者需要原始8位值,这些8位值表示以UTF-8格式(或其他编码形式)来编码的字符。开发者需要操作没有特定编码形式的Unicode字符。所以,我们需要编写两个辅助(helper)函数,以便在这两种情况之间转换,使得转换后的输入数据能够符合开发者的预期。?
相关文章推荐
- Python - 了解bytes、str与unicode的区别
- 了解python中bytes,str和unicode的区别
- Python3中 bytes/str的区别
- PYTHON编码处理-str与Unicode的区别
- 关于python2中的unicode和str以及python3中的str和bytes
- python 中文 str 以及 unicode区别和互相转换
- 关于python2中的unicode和str以及python3中的str和bytes
- Python 编码处理-str与Unicode的区别
- python3字符串编码总结-str(unicode)_bytes
- 浅析python2x与python3x里的str,unicode,bytes关系
- 浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
- python str bytes unicode utf-8 学习
- python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str
- python3字符串编码总结str(unicode)<-->bytes
- python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str
- python3中bytes和str,encode和decode的区别
- PYTHON编码处理-str与Unicode的区别
- python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8')
- Python中str()与__str__、repr()与__repr__、eval()、__unicode__的关系与区别
- Python 编码处理-str与Unicode的区别