简述
python2 unicode的学习和使用
UTF-8和Unicode的关系
Unicode是一种字符集, 而UTF-8,UTF-16,UTF-32都是Unicode字符集实现的一种方式,在阮一峰的文章中有有关unicode编码的详细说明,http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
python2中使用如何Unicode
在python2中所有有关Unicode编码问题都可以统一成一个步骤
- 外部输入编码,decode转成unicode
- 逻辑处理(内部编码,统一unicode)
- encode转成需要的目标编码,输出
str和unicode的转换
其中str和unicode都是basestring的子串
unicode = str_obj.decode('str的编码')
str = unicode_obj.encode('希望得到的str的编码')
isinstance(u'中文', unicode) //判断编码方式
isinstance(u'中文', str) //判断编码方式
文本展示
使用声明
# -*- coding: utf-8 -*-
#coding=utf-8
若头部声明coding=utf-8,a = '中文'其编码为utf-8
若头部声明coding=gb2312,a = '中文' 其编码为gbk
还要注意源文件的编码保存方式,与文件声明保持一致。
自定义字符串直接通过:s=u'中文'定义为Unicode编码
命令行输入
>>> s = raw_input('请输入:')
请输入:中文
>>> type(s)
<type 'str'>
可以看到从命令行输入的是str类型,所以在使用的时候按照原则需要转换成unicode编码,使用s.decode(sys.stdin.encoding),转换成unicode编码,sys.stdin.encoding是读取当前环境的编码
>>> import sys
>>> print sys.stdin.encoding
UTF-8
>>> t = s.decode(sys.stdin.encoding)
>>> type(t)
<type 'unicode'>
文本输入
用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode
info = codecs.open(file,'w','utf-8')
通过codecs指定输入文件打开的语言编码,会被默认转化,但使用标准文件读写方式读入的str需要自己decode成Unicode编码
>>> import chardet
>>> f = open("file")
>>> print chardet.detect(f.read())
{'confidence': 0.99, 'encoding': 'utf-8'}
判断文件的编码形式
字符串比较
比较按照原则来,采用Unicode编码进行比较,其实只要在输入阶段都转化成Unicode编码,这里也不用担心了
命令行输出
其中sys.stdin.encoding和sys.stdout.encoding是标准输入输出sdtin,stdout输入输出使用的编码,包命令行参数和print输出,由locale环境变量决定,所以一般print输出不需要将Unicode编码encoding。sys.getdefaultencoding()文件读写和字符串处理等操作使用的默认编码
>>> print sys.stdin.encoding
UTF-8
>>> print sys.stdout.encoding
UTF-8
>>> print u'中文'
中文
>>> print sys.getdefaultencoding()
ascii
>>> sys.setdefaultencoding('utf-8') //慎用
正则表达式
TODO
http://blog.csdn.net/liweisnake/article/details/17325493