核心点:
1. 在现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或需要传输时,可以转换为UTF-8编码。
2. decode()方法将其他编码字符转化为Unicode编码字符。encode()方法将Unicode编码字符转化为其他编码字符。
3. ASCII码仅仅能处理英文,GB2312处理中文,全球统一有了Unicode,为了提高Unicode存储和传输性能,产生了UTF-8,它是Unicode的一种实现形式。
4. Python2 解析器使用的默认解析编码是 ASCII,可以sys.setdefaultencoding() 设置成 utf-8.
5. # coding=utf-8 提示编译器这个文件是 utf-8编码, 但你一定要保证文件确实是这个编码噢...
6. a = '卧室门是中华儿女', a.encode("utf-8") 等价于 a.decode(defaultencoding).encode("utf-8") , 所以会报错. 【chardet.detect(a) GB2312; a.decode('GB2312').encode('utf-8')】
# 以下代码在Windows系统 CMD+R python之后的命令行执行.
>>> d = '思路发加上的' >>> chardet.detect(d) {'confidence': 0.99, 'language': 'Chinese', 'encoding': 'GB2312'} >>> d 'xcbxbcxc2xb7xb7xa2xbcxd3xc9xcfxb5xc4' >>> d.encode('utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128) >>> d.decode('GB2312').encode('utf-8') 'xe6x80x9dxe8xb7xafxe5x8fx91xe5x8axa0xe4xb8x8axe7x9ax84' >>> d.decode('GB2312') u'u601du8defu53d1u52a0u4e0au7684' >>> d.decode('GB2312') u'u601du8defu53d1u52a0u4e0au7684' >>> d.decode('GB2312').encode('GB2312') 'xcbxbcxc2xb7xb7xa2xbcxd3xc9xcfxb5xc4' >>> d.encode('GB2312') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128) >>>
参考:
https://blog.csdn.net/apache0554/article/details/53889253