在Python中使用中文

这个问题曾在我初学Python的时候令我头疼不已,尤其是目前我们因为各种包的原因还只能使用2.x的版本。在3.x中字符编码已经统一用Unicode了。

Python 默认支持的是ASCII字符,包含了英文字母大小写以及标点符号,用一枚字节表示。中文则使用两枚字节表示。

 

没兴趣的同学可以绕过这段…

有人可能要问了,我擦,为神马以前说一个汉字的精度越高字节越多么?为神马是两枚字节?

这是两个不同的概念。存储里讲的是一个汉字占两个字节。 而你说的点阵那个是打印码。

 

平时说1个汉字占2个字节,是指汉字编码,就象每个字符都有一个ASCII码一样。1个ASCII码占1个字节,而1个汉字编码占2个字节。

简单地解释下,我们屏幕上看到的汉字其实是一个16*16的矩阵,它所需要的位数共是16*16=256个位,每个字节为8位,因此,每个汉字都需要用256/8=32个字节来表示。

即每两个字节代表一行的16个点,共需要16行,显示汉字时,只需一次性读取32个字节,并将每两个字节为一行打印出来,即可形成一个汉字。

这也就是传说中的点阵字体。

image

 

---我是正文的分割线---

So当中文编码和ASCII混用的话,就会出现错误咯。

目前中文编码有GB2312,BIG5,GBK。

建议使用统一字符集Unicode,可以处理所有的语言文字。

 

如果在.py文件中使用中文,请使用:

#-*- coding:utf-8 –*-

 

请注意在使用IDE的时候,project的编码格式一定要设置为utf-8,否则输出的仍是乱码,因为你写的脚本没用UTF-8保存。

先别急着去练习,咱们来看看下面这个脚本:

 

#-*- coding:utf-8 –*-

# chinese.py

chinese='''
在Python中使用中文,一定要
注意字符编码问题
'''
print chinese

 

在命令行运行的结果:

7P%Q7S)3M~QJE)K0QJ5~IQC

 

这是咋回事呢?不是写了编码了么?还乱码啊,有木有?有木有?有木有?

 

这是因为win的,命令行用的是cp936编码,而上面脚本用的是utf-8编码,因此导致乱码。

解决方法是,使用decode和encode函数对字符重新解码和编码。

print chinese.decode('utf-8').encode('cp936')

OK,熟悉的文字出来了。

image

 

2011/8/8更新,以下内容转载自:

http://ppjava.iteye.com/blog/210143

 

 

常见的编码转换分为以下几种情况:

  • 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)
 另外一篇有价值的文章可查看这一篇:传送门

 

 

posted @ 2011-04-27 15:55  牛皮糖NewPtone  阅读(19210)  评论(0编辑  收藏  举报