python 中文编码笔记
最近碰了很多钉子。。。
不得不说,python2.6相较于之前发布的版本,就编码方面来说,有明显的进步。本机使用的是python2.6,同样的代码根本没有遇到问题。到了服务器上部署时,一台服务器的python2.5和另一台服务器的python2.4,都折磨得我苦不堪言。
先厘清几个概念:python内置的字符类型是unicode,当需要进行编码转换时,都要先转成unicode,然后再转换成目标编码。而str类型是二进制类型,例如
声明变量uniStr=u'的',uniStr的类型为Unicode
执行gbStr=uniStr.encode('gb2312'),则gbStr的类型为str,长度为18字节(gb2312标准里用两个字节表示一个汉字)。
若执行gbStr.encode('gb2312'),则会报错,因为'ascii' codec can't decode byte 0xd3 in position 0: ordinal not in range(128)。
关于unicode:unicode可以想象成一个比ascii大得多的码表,能够包含所有现存字符。每个字符有一个对应的编码,编码的范围是0到0x10ffff,那么我们可以使用32位的int来储存一个unicode字符。但这样比较浪费空间,人们就提出了别的编码方案,例如utf-8。简而言之,编码方案就是把unicode值映射成字节流,术语是encoding。
python默认的编码方案是ascii,所有超过128的unicode编码都会报UnicodeEncodeError。
utf-8方案编码方案是应用较广的一种,编码规则如下:
- unicode编码值小于128,原封不动;
- unicode编码值在128到7ff,将转换为2个字节,每字节值范围在128到255之间;
- unicode编码值大于7ff的,将转换为3-4个字节,每字节值范围在128到255之间。
posted on 2010-08-10 17:06 lifehacker 阅读(2055) 评论(0) 收藏 举报
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步