在学习python2的时候,字符串和编码可以说是最让人困惑的知识点,假如知其然而不知其所以然,则在后续的写代码和学习过程中会让人很痛苦,甚至会放弃,而对比PHP语言来说,即使完全不了解编码等知识,也可以写出代码,这是幸事,但反过来说太透明会让你失去很多能力. python2字符串和编码难理解的原因在于,一方面很多书籍很少说这方面的知识,另外一方面是python设计导致的,编码问题和文件编码,系统环境,IO操作等都有关系,混杂在一块很让人头疼. 网络上也有很多中文资料去说明,但是在学习的时候只能借鉴,原因在于写的人理解的也是比较片面,很容易误导人,所以在学习过程中一定要去实践,要仔细琢磨. 自己综合学习了下,以自己的方式写了篇博客,能力有限,希望不要误导人. 编码对于编码个人觉得理解概念即可,具体的转换规则,存储规则可以不用太仔细了解,这类似于进制,知道概念即可,不强制掌握进制转换的方法. 讲编码的文章很多,掌握以下概念即可. 世界上任何一个字符都可以用一个Unicode编码来表示,一旦字符的Unicode编码确定下来后,就不会再改变了,但是unicode存在二个局限性,第一一个Unicode字符在网络上传输或者最终存储起来的时候,并不见得每个字符都需要两个字节,所以可能会造成空间浪费,第二一个Unicode字符保存到计算机里面时就是一串01数字,那么计算机怎么知道一个2字节的Unicode字符是表示一个2字节的字符呢,还是表示两个1字节的字符呢. Unicode只是规定如何编码,并没有规定如何传输、保存这个编码. 例如“汉”字的Unicode编码是6C49,可以用4个ascii数字来传输、保存这个编码,也可以用utf-8编码的3个连续的字节E6 B1 89来表示它,关键在于通信双方都要认可. 因此Unicode编码有不同的实现方式,比如:UTF-8、UTF-16等等 python下的编码python2对于编码理解困难,很大一部分原因在于系统有很多编码,这里说明下 #windows环境和linux环境下的区别sys.getdefaultencoding()sys.getfilesystemencoding()locale.getdefaultlocale()locale.getpreferredencoding()sys.stdout.encoding()
最佳实践 文件本身的编码和文件头编码( Python2中str和unicode对象首先声明下,自己运行的代码在windows和linux环境各有一份示例,且通过python交互式解析器来说明. python解析器不用用户定义编码头,所以内部处理依赖于 在windows机器运行 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|