前言:
Python 2.X的版本字符问题一直给Python使用者带来麻烦,导致大家一直使用如下方式解决:
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
目录:
- 内容回顾
- 相关资料
- 阅读后感
正文:
一. 内容回顾
1.1 字符问题
一个字符串是一个字符序列,问题出在“字符”的定义上。把码位转换成字节序列的过程是编码(encode),把字节序列转换成码位的过程是解码(decode)。在编码和解码过程中就存在Unicode,UTF-8, ASCII等这些方式,导致出现问题,编码格式不一致。
1.2 字节概要
主要讲解字节的结构体和内存视图,分bytes, bytemarray, memory view, array.array。
1.3 基本的编解码器
Python自带超过100种编解码器,常见的就是utf-8, gb2313。其中gb2313用于编码简体中文的陈旧的标准,这是亚洲语言中使用较广泛的多字节编码之一。
1.4 了解编解码问题
编解码问题有3个,分别是:UnicodeEncodeError UnicodeDecodeError SyntaxError
出现编解码上述3个问题的地方主要是国际化使用,如:处理希腊文,俄文等,出现一些特殊字符。
1.5 处理文本文件
处理文本的最佳实践是:Unicode三明治
1.6 为了正确比较而规范化Unicode字符串
同上了解编码问题,主要是处理国际化字符问题,进行规范化Unicode字符串。
1.7 Unicode文本排序
文本排序主要是sorted() 和.sort()内置函数的使用。
1.8 Unicode数据库
1.9 支持字符串和字节序列的双模式API
获取系统编解码方式:locale.getpreferredencoding()、sys.getfilesystemencodeing()。
二. 相关资料
Python编码异常解决方法:
1、遵循PEP0263原则,声明编码格式(lz推荐)
2、使用u中文替代中文(py2)
3、Reset默认编码
4、终极原则:decode early, unicode everywhere, encode late
5、升级Python 2.x到3.x
解释一下 -> 终极原则:decode early, unicode everywhere, encode late:
在输入或者声明字符串的时候,尽早地使用decode方法将字符串转化成unicode编码格式;然后在程序内使用字符串的时候统一使用unicode格式进行处理,比如字符串拼接、字符串替换、获取字符串的长度等操作;最后,在输出字符串的时候(控制台/网页/文件),通过encode方法将字符串转化为你所想要的编码格式,比如utf-8等。按照这个原则处理Python的字符串,基本上可以解决所有的编码问题(只要你的代码和Python环境没有问题)。
三. 阅读后感
从接触Python开始到现在一直在使用Python 2.X版本,刚开始的接触Python的时候经常被字符串乱码受阻,现在对Python的理解深入了,遇见这些问题的时候能够很快的进行处理,Python 3.X版本解决了Python 2.X大部分因为编码产生的异常问题。
参考:
1. 可爱的 Python:Python中的文本处理
2. Python字符串编码及乱码解决方案