预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Python的中文处理 一、使用中文字符 在python源码中如果使用了中文字符,运行时会有错误,解决的办法是在源码的开头 部分加入字符编码的声明,下面是一个例子: #!/usr/bin/envpython #-*-coding:cp936-*- PythonTutorial中指出,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爱好者" printa[0] 只能输出“我”字的前半部分,要想输出整个的“我”字还需要: b=a[0:2] printb 才行,很不方便,并且当一段文本中同时有中英文如何处理?最好的办法就是转换为 unicode。像这样: c=unicode(a,"gb2312") printc[0] 这个时候c的下标对应的就是每一个字符,不再是字节,并且通过len(c)就可以获得字符数! 还可以很方便的转换为其他编码,比如转换为utf-8: d=c.encode("utf-8") 四、<type‘str’>和<type‘unicode’> 2 <type‘str’>将字符串看作是字节的序列,而<type‘unicode’>则将其看作是字符的序列, 单个字符可能占用多个字节;字节相对于字符,其在存储层次中更低一些。 str转换为unicode要decode,可以这样想,因为要把字节序列解释成字符序列,字节 序列是底层的存放方式,解码(decode)成更高层的字符以便使用;同理,unicode转换为 str要encode,就象信息编码(encode)后才存储一样: s.decode(encoding)<type'str'>to<type'unicode'> u.encode(encoding)<type'unicode'>to<type'str'> 例如: >>>s='str' >>>type(s) <type'str'> >>>type(s.decode()) <type'unicode'> >>>s=u'str' >>>type(s) <type'u