Python 字符集的相关知识
2014-08-22 14:16
232 查看
python字符编码
2013-09-06 16:46:19应该在代码最初两行内包含:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
获得/设置系统的缺省编码
sys.getdefaultencoding()
sys.setdefaultencoding('utf-8')
获得文件系统的文件名的编码
sys.getfilesystemencoding()
获得当前终端的输入、输出编码
sys.stdout.encoding
sys.stdin.encoding
编码转换(先转换为unicode,再转换为具体的编码),有两种方法:
unicode('abc', 'mbcs').encode('utf-8')
'abc'.decode('mbcs').encode('utf-8')
常见的编码转换分为以下几种情况:
* unicode->其它编码
例如:a为unicode编码 要转为gb2312。a.encode('gb2312')
* 其它编码->unicode
例如:a为gb2312编码,要转为unicode. unicode(a, 'gb2312')或a.decode('gb2312')
* 编码1 -> 编码2
可以先转为unicode再转为编码2
如gb2312转big5
unicode(a, 'gb2312').encode('big5')
* 判断字符串的编码
isinstance(s, str) 用来判断是否为一般字符串
isinstance(s, unicode) 用来判断是否为unicode
* 如果一个字符串已经是unicode了,再执行unicode转换有时会出错(并不都出错)
可以写一个通用的转成unicode函数:
def u(s, encoding):
if isinstance(s, unicode):
return s
else:
return unicode(s, encoding)
------------------------------------------------------------------------------------------------------------------------
Python字符编码自学心得
最近1个月都在尽量抽空学习python,与以往学习java感觉最大的差异是中文文档相当稀少,只能硬着头皮看E文教材,对于中文处理的介绍就更少,可能因为这个原因,大部分初学者都感觉python天生处理中文能力奇差,小弟努力学习一个星期后,发现其实python对字符编码处理能力相当强劲,特写个学习新心得。
1。字符串还是字节串?
我认为,python的字符串只能说是字节串,你甚至可以在里面存放一张图片或者一个二进制可执行文件
import types
f=open('d:\\hello.jpg','r')
pic=f.read()
print type(pic)==types.StringType
print pic
如果图片存在,这段代码会显示True和一串乱码。显然所谓字符串只是一串字节数据。
2。' ' 和 u' '
python的字符串有' '和u' '两种,前者是一个字节串,后者是经过unicode编码的。unicode是一种用两个字节表示每一个字符的编码方式,具体不介绍了。可以这样测试:
>>>str1='你好'
>>>str1
'\xc4\xe3\xba\xc3' 得到一个字节串,我的机子是xp系统的,默认编码是cp936,所以这是“你好”的cp936编码
>>>str2=str1.decode('cp936')
>>>str2
u'\u4f60\u597d' 转化为unicode编码,str2是一个unicode字符串
str1和str2都是一个字符串,不过编码的方式不一样,我们可以看出他们都占用4个字节,不过真实长度却一样。
>>>len(str1)
4
>>>len(str2)
2
str1只是一个普通的字节串,python并不知道他使用的是什么编码,所以长度等于它占用的字节数。而str2是一个经过unicode编码的字符串,我们使用字符串对象的方法decode告诉系统'\xc4\xe3\xba\xc3'是一个cp936编码串,然后系统会把它转化为unicode编码串u'\u4f60\u597d',系统就可以判断出这是一个含有两个字符的字符串。反过来,我们可以使用encode方法把unicode字符串编码为普通字符串。
>>>str2.encode('gbk')
'\xc4\xe3\xba\xc3'
惊喜的是,我们其实很容易就可以得到一个中文unicode字符串。我们测试一下:
>>>mycity=u'佛山'
>>>mycity
u'\u4f5d\u5c71'
看到吗?python已经为我们完成了转换,mycity已经是unicode字符串。
在中文转换中我们需要获取当前系统使用字符编码,我们可以通过locale模块获取。
>>>import locale
>>>locale.getdefaultlocale()
('zh_cn','cp936')
可以看到我的机子上的编码是cp936。同样我们可以通过locale模块获取系统支持的所有编码。
>>>import locale
>>>locale.locale_encoding_alias
{'en': 'ISO8859-1', 'euc_jp': 'eucJP', 'jis7': 'JIS7', 'ascii': 'ISO8859-1', 'is
o8859_15': 'ISO8859-15', 'iso8859_14': 'ISO8859-14', 'iso8859_11': 'ISO8859-11',
'iso8859_10': 'ISO8859-10', 'iso8859_13': 'ISO8859-13', 'euc_kr': 'eucKR', 'jis
': 'JIS7', 'utf_8': 'UTF8', 'iso2022_jp': 'JIS7', 'latin_1': 'ISO8859-1', '437':
'C', 'ajec': 'eucJP', 'c': 'C', 'tactis': 'TACTIS', 'koi8_r': 'KOI8-R', 'shift_
jis': 'SJIS', 'iso8859_9': 'ISO8859-9', 'iso8859_8': 'ISO8859-8', 'koi8_u': 'KOI
8-U', 'iso8859_5': 'ISO8859-5', 'iso8859_4': 'ISO8859-4', 'iso8859_7': 'ISO8859-
7', 'iso8859_6': 'ISO8859-6', 'iso8859_1': 'ISO8859-1', 'iso8859_3': 'ISO8859-3'
, 'iso8859_2': 'ISO8859-2'}
注意:本文从以下网址抄录 http://www.douban.com/note/300451825/?type=rec
相关文章推荐
- Oracle字符集相关知识(查询,修改,dmp字符集)
- oracle字符集相关知识(查询,修改,dmp字符集)
- 深入讲解Python中面向对象编程的相关知识
- 详解Python的Django框架中的模版相关知识
- 详解Python的Django框架中的模版相关知识
- Sybase ASE字符集相关知识及问题处理方法
- 不得不知道的Python字符串编码相关的知识
- python中如何查看statsmodels相关知识
- python中import的相关知识总结
- Python 学习(5)---类的相关知识整理(续)
- INFORMIX字符集相关知识
- 关于字符集和Unicode的相关知识
- oracle字符集相关知识小计
- 深入讲解Python中面向对象编程的相关知识
- INFORMIX字符集相关知识
- ★★ 关于字符集和Unicode的相关知识
- python in 的相关知识
- 关于字符集和Unicode的相关知识
- 在Python中marshal对象序列化的相关知识
- 基础知识(八)python文件操作相关函数