标签:
#!/usr/bin/env python #coding:utf-8 str = ‘中国‘ print type(str) print str str = u‘中国‘ print type(str) print str str = ‘中国‘.decode(‘UTF8‘) print type(str) print str
输出:
<type ‘str‘> 涓浗 <type ‘unicode‘> 中国 <type ‘unicode‘> 中国
1、设置了默认编码是UTF8,#coding:utf-8,之后定义的字符串都会是utf8的格式进行编码;
2、所以讲第二行代码去掉的时候,就会报错
File "D:/Program Files/Python/TS/encoding.py", line 3
SyntaxError: Non-ASCII character ‘\xe4‘ in file D:/Program Files/Python/TS/encoding.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
3、若将第二行代码改为#coding:gbk的话,‘中国’.decode(‘UTF8‘)就会报错,因为默认的编码是gbk了,所以中文字符解码的时候就应该是从gbk进行解码
4、ps:在python自带的idle中第一个输出也不会是乱码
下面简单介绍一些解码和编码:
#!/usr/bin/env python #coding:utf-8 str = ‘中国‘.decode(‘UTF8‘) print type(str) print str
unicode我的理解就是一个过渡的编码形式,decode也就是解码,都会解码成unicode形式,再经过编码转化成其他形式,所以转码前一直要知道str的编码格式。如下所示:
#!/usr/bin/env python #coding:utf8 str = ‘中国‘.decode(‘utf8‘) print type(str) print str print type(str.encode(‘gbk‘)) print str
<type ‘unicode‘> 中国 <type ‘str‘> 中国
文件的读写
首先,我们来了解一下中文的编码。
1、GB2312-80字符集,中文名国家标准字符集(GB=GuóBiāo国标)。收入汉字6763个,符号715个,总计7478个字符,这是大陆普遍使用的简体字字符集。
2、Big-5字符集(好像用的挺少吧),中文名大五码,是台湾繁体字的字符集,收入13060个繁体汉字,808个符号,总计13868个字符,普遍使用于台湾、香港等地区。
3、GBK字符集,中文名国家标准扩展字符集(GB=GuóBiāo国标;K=Kuò扩,即扩展),兼容GB2312-80标准,包含Big-5的繁体字,但是不兼容Big-5字符集编码,收入21003个汉字,882个符号,共计21885个字符,包括了中日韩(CJK)统一汉字20902个、扩展A集(CJK Ext-A) 中的汉字52个。
4、GB18030-2000字符集,包含GBK字符集和CJK Ext-A 全部6582个汉字,共计27533个汉字
好像一般用到gb2312和gbk的比较多,GB18030只有遇到一些生僻的字的时候才会用的到。
windows下的记事本默认的编码是ANSI:
在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。
言归正传,建立一个test.txt文件,内容abc中文。
#!/usr/bin/env python #coding:utf8 file_obj = open(‘test.txt‘) line = file_obj.readline() print line.decode(‘utf8‘) print type(line)
这样是会有错误的因为txt默认编码是gbk的,所以在对line进行解码的时候用utf8是不行的,换成gbk就没问题了。
ps:python中的print直接把字符串传递给操作系统,所以你需要把str解码成与操作系统一致的格式。
标签:
原文地址:http://www.cnblogs.com/ferraborghini/p/4845280.html