python的中文处理.pdf
文本预览下载声明
Python 的中文处理
一、使用中文字符
在 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\xd6\xd0\xce\xc4
str = 中文
str
\xd6\xd0\xce\xc4
u 中文只是声明 unicode ,实际的编码并没有变。这样子就发生变化了:
str = 中文
str
\xd6\xd0\xce\xc4
str = str.decode(gb2312)
str
u\u4e2d\u6587
更进一步:
s = 中文
s.decode(gb2312)
u\u4e2d\u6587
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 编码存储的字符串,python 可以正确的识别出其中的
中文字符以及中文上下文中的标点符号。
前缀“u ”表示“后面这个字符串“是一个Unicode 字符串”,这仅仅是一个声明,并不
表示这个字符串就真的是 Unicode 了;就好比某正太声称自己已满 18 岁,但实际上他的真
实年龄并不确定,现在体育界年龄造假可不稀罕幺!
那么声明成 u 有什么作用呢?对于 Python 来说,只要你声明某字符串是 Unicode ,它就
会用 Unicode 的一套机制对它进行处理。比方说,做字符串操作的时候会动用到内部的
Unicode 处理函数,保存的时候以 Unicode 字符(双字节)进行保存。等等。显而易见,对
于一个实际上并不是 Unicode 的字符串,做 Unicode 动作的处理,是有可能会出问题的。u
前缀只适用于你的字符串常量真的是Unicode 的情况。
三、中文字符的 IO 操作
用 python 处理字符串很容易,但是在处理中文的时候需要注意一些问题。比如:
a = 我们是 python 爱好者
print a[0]
只能输出“我”字的前半部分,要想输出整个的“我”字还需要:
b = a[0:2]
print b
才行,很不方便,并且当一段文本中同时有中英文如何处理?最好的办法就是转换为
unicode 。像这样:
显示全部