@
rebeccaMyKid #10 编码问题,归结下来有这几个地方需要注意:
输入编码 - 处理过程 - 输出编码 - 显示编码
输入编码是指,你获取的信息来源,比如从数据库里、文件里、网页里、源文件里,获取的是输入的数据,要让程序正确低读取出这些数据; python3 里,"中文"和 u"中文"是等价的,
而.py 文件如无意外是 utf-8 编码的,这时候就是一个隐式的 utf-8 到 unicode 的转换了。如果文件编码不是 utf-8,是需要在源码前写#coding: GBK 这样的声名,说这个文件是 GBK 编码的; python2 时候,如果没声名 utf-8,,在源码里写中文是会报错的,因为默认了 ascii 编码而已。
处理过程,在 python 里的话用 Unicode 串最方便了,因为方便后续处理;其他语言有些是没有宽字节类型的比如 php,就用 utf-8。
输出编码,一般需要根据你输出的地方,把处理过程中的字符处理成合适的编码;这一点在 python 里很多时候是隐式处理的,意思就是,直接给输出接口喂 Unicode 的东西,自动封装来编码过程;例子就是,print(u'中文')跟 print("中文".encode('utf-8'))其实是两个处理方式了。
显示编码,根据使用环境,不一定是 python 的问题;比如 python 输出 web 页面,需要设置 HTTP Header 声名编码、Html META 声名,然后浏览器才能正确解释出内容,否则也是乱码。极端例子是在 windows 的命令符使用 python,直接 print(u'中文') 会出现 unicode 无法显示的问题,因为,中文 Windows 的终端是 GBK 的,print()输出时候没法编码正确。
其实所有语言处理编码都是这几个关键点。