Python中文处理:str与unicode

来源:互联网 发布:凡科互动 游戏源码 编辑:程序博客网 时间:2024/05/21 22:33

使用python2.x做中文的文本挖掘,遇到了几个坑,现总结如下:

1. 默认的defaultcoding:ascii

UnicodeDecodeError: ‘ascii’ codec can’t decode byte ……

如果遇到了上述错误,就应该好好检查一下python文件的编码格式了

python默认使用defaultencoding=ascii,若你没注意这一点直接以“utf-8”格式进行转换,将会报错

因此,建议编码的时候养成好习惯,切记一定要指定文件的编码格式

# -*- coding: utf-8 -*-<div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-57b60e2fab98e616841284-1"><span class="crayon-k ">reload</span><span class="crayon-sy">(</span><span class="crayon-k ">sys</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="crayon-57b60e2fab98e616841284-2"><span class="crayon-k ">sys</span><span class="crayon-sy">.</span><span class="crayon-e">setdefaultencoding</span><span class="crayon-sy">(</span><span class="crayon-s">'utf-8'</span><span class="crayon-sy">)</span></div></div>

这里有2个作用:

1. 指定文本的编码格式为utf-8,这将影响到你定义的变量字符串(e.g. “test”)的编码

2. 指定编码函数 .encode()默认的decode()的编码为utf-8,因为 

str.encode("utf-8") 等价于 str.decode(defaultencoding).encode("utf-8")<span style="font-size:14px;"><span class="crayon-sy"></span></span>

2. "test" 与 u"test" 的差别

python作为脚本语言,对变量类型没有强制约束,因此容易造成类型的混淆

s1 = "字符串"  s2 = u"字符串" 

感觉上,2上述2种形式都是定义字符串,其实不然,第二种方式定义的是unicode对象。

str1 = "字符串"    # 字符串,编码与文件声明的编码一致str2 = u"字符串"   # unicode对象print type(str1)print type(str2)输出:<type 'str'><type 'unicode'>

标准的unicode对象有2种定义方式:

s1 = u"字符串"s2 = unicode("字符串", "utf-8")

unicode对象,可以和字符串进行转换:

# -*- coding:utf-8 -*-str = "字符串"                 # 一个utf-8格式的字节串(与文件声明编码一致)uObj = str.decode("utf-8")     # str被解码为unicode对象,赋给uObj str = uObj.encode("utf-8")     # unicodeObj被编码为gbk格式的字节串print str输出:<span style="font-size:14px;"><span style="font-size:14px;"></span></span><pre name="code" class="html">字符串





0 0