Py thon 的中文处理 一、使用中文字符 在 py thon 源码中如果使用了中文字符,运行时会有错误,解决的办法是在源码的开头部分加入字符编码的声明,下面是一个例子: #!/u sr/bin/env py thon # -*- coding: cp936 -*- Py thon Tu torial 中指出,py thon 的源文件可以编码 ASCII 以外的字符集,最好的做法是在#!行后面用一个特殊的注释行来定义字符集: # -*- coding: encoding -*- 根据这个声明,Py thon 会尝试将文件中的字符编码转为 encoding 编码,并且,它尽可能的将指定地编码直接写成 Unicode 文本。 注意,coding:encoding 只是告诉 Py thon 文件使用了 encoding 格式的编码,但是编辑器可能会以自己的方式存储.py 文件,因此最后文件保存的时候还需要编码中选指定的ecoding才行。 二、中文字符的存储 >>> str = u "中文" >>> str u '\x d6\x d0\x ce\x c4' >>> str = "中文" >>> str '\x d6\x d0\x ce\x c4' u "中文"只是声明 u nicode,实际的编码并没有变。这样子就发生变化了: >>> str = "中文" >>> str '\x d6\x d0\x ce\x c4' >>> str = str.decode("gb2312") >>> str u '\u 4e2d\u 6587' 更进一步: >>> s = '中文' >>> s.decode('gb2312') u '\u 4e2d\u 6587' >>> len(s) 4 >>> len(s.decode('gb2312')) 2 >>> s = u '中文' 1 >>> len(s) 4 >>> s = '中文test' >>> len(s) 8 >>> len(s.decode('gb2312')) 6 >>> s = '中文test,' >>> len(s) 10 >>> len(s.decode('gb2312')) 7 可以看出,对于实际Non-ASCII 编码存储的字符串,py thon 可以正确的识别出其中的中文字符以及中文上下文中的标点符号。 前缀“u ”表示“后面这个字符串“是一个 Unicode 字符串”,这仅仅是一个声明,并不表示这个字符串就真的是 Unicode 了;就好比某正太声称自己已满 18 岁,但实际上他的真实年龄并不确定,现在体育界年龄造假可不稀罕幺! 那么声明成 u 有什么作用呢?对于Py thon 来说,只要你声明某字符串是 Unicode,它就会用 Unicode 的一套机制对它进行处理。比方说,做字符串操作的时候会动用到内部的Unicode处理函数,保存的时候以Unicode 字符(双字节)进行保存。等等。显而易见,对于一个实际上并不是 Unicode 的字符串,做 Unicode 动作的处理,是有可能会出...