一、使用中文字符
在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的情况 。