一、使用中文字符

在python源码中如果使用了中文字符,运行时会有错误,解决的办法是在源码的开头部分加入字符编码的声明,下面是一个例子:

!/usr/bin/env python

-- coding: cp936 --

Python Tutorial中指出,python的源文件可以编码ASCII以外的字符集,最好的做法是在#!行后面用一个特殊的注释行来定义字符集:

-- coding: encoding --

根据这个声明,Python会尝试将文件中的字符编码转为encoding编码,并且,它尽可能的将指定地编码直接写成Unicode文本。

注意,coding:encoding只是告诉Python文件使用了encoding格式的编码,但是编辑器可能会以自己的方式存储.py文件,因此最后文件保存的时候还需要编码中选指定的ecoding才行。

二、中文字符的存储str = u"中文"

str

u"xd6xd0xcexc4"

str = "中文"

str

"xd6xd0xcexc4"

u"中文"只是声明unicode,实际的编码并没有变。这样子就发生变化了:str = "中文"

str

"xd6xd0xcexc4"str = str.decode("gb2312")

str

u"u4e2du6587"

更进一步:s = "中文"

s.decode("gb2312")

u"u4e2du6587"len(s)

4len(s.decode("gb2312"))

2s = u"中文"

len(s)

4s = "中文test"

len(s)

8len(s.decode("gb2312"))

6s = "中文test,"

len(s)

10len(s.decode("gb2312"))

7

可以看出,对于实际Non-ASCII编码存储的字符串,python可以正确的识别出其中的中文字符以及中文上下文中的标点符号。

前缀“u”表示“后面这个字符串“是一个Unicode字符串”,这仅仅是一个声明,并不表示这个字符串就真的是Unicode了;就好比某正太声称自己已满18岁,但实际上他的真实年龄并不确定,现在体育界年龄造假可不稀罕幺!

那么声明成u有什么作用呢?对于Python来说,只要你声明某字符串是Unicode,它就会用Unicode的一套机制对它进行处理。比方说,做字符串操作的时候会动用到内部的Unicode处理函数,保存的时候以Unicode字符(双字节)进行保存。等等。显而易见,对于一个实际上并不是 Unicode的字符串,做Unicode动作的处理,是有可能会出问题的。 u前缀只适用于你的字符串常量真的是Unicode的情况 。