Python2 字符串问题
原谅我这一生不羁放纵爱自由
也会怕有一天会跌倒 Hoo No
字符串在python中的使用很多,而且字符串也很多种类,本身也有很多方法,例如replace,len,startswith,endwith,split等等,本文着重于字符串和编码之间的关系。
Python2 的字符串,一般不会出问题,遇到中英文混编的时候就会很糊涂,查了些资料,由于时代的限制,当时的字符串设计仅对纯英文友好,更不必谈混编,后来的 2.7.x 版本已经做的很好了,但是真遇到问题会比较绕,内部的处理机制完全不符合 Python 设计哲学的 Simple is better than complex。
关于字符编码的历史问题,已经目前常用的编码以及转换,可以看字符串和编码。
归根结底:str其实并不是字符串而是字节串(八位二进制数据串),而Unicode字符串对象才是真正的字符串。
总结的解决方案为:读取到字节串数据后根据实际编码格式解码(decode)成 Unicode 字符串对象,使用 Unicode 对象处理字符串,输出到控制台时用 Unicode 字符串对象,保存数据到文件时将字符串编码(encode)成 utf-8 编码格式字节串数据。如果是代码里面创建的字符串对象,遇到中英文混排的情况,尽量使用 Unicode 来避免 UnicodeEncodeError
。
更多的文章可以参考: