在Python中使用中文

在Python中使用中文

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

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

 

没兴趣的同窗能够绕过这段…函数

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

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

 

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

简单地解释下,咱们屏幕上看到的汉字实际上是一个16*16的矩阵,它所须要的位数共是16*16=256个位,每一个字节为8位,所以,每一个汉字都须要用256/8=32个字节来表示。命令行

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

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

image

 

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

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)

 另一篇有价值的文章可查看这一篇:传送门

相关文章
相关标签/搜索