Python中文处理:str与unicode

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

1. 默认的defaultcoding:ascii

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

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

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

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

# -*- coding: utf-8 -*-
reload(sys)
sys.setdefaultencoding('utf-8')

这里有2个作用:

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

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

str.encode("utf-8") 等价于 str.decode(defaultencoding).encode("utf-8")

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

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

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

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

str1 = "字符串"    # 字符串,编码与文件声明的编码一致
str2 = u"字符串"   # unicode对象
print type(str1)
print type(str2)

输出:



标准的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

输出:
字符串

 
  



你可能感兴趣的:(python,python,中文,字符串,转换,str)