zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Hadoop 2.7.1 源代码目录结构分析
    Jit
    java性能分析工具
    最近一个dish项目的建设思考
    mysql的ACID的理解
    实践中积累沟通组织经验
    系统性能--磁盘/网卡
    系统性能--CPU
    调停者模式的批斗
    channel和Stream的对比
  • 原文地址:https://www.cnblogs.com/ldd215/p/5465981.html
Copyright © 2011-2022 走看看