• python编码的理解


    from:http://www.unixresources.net/linux/clf/python/archive/00/00/42/73/427317.html

    结合二位的答复,运行结果如下:
    >>> a='中国'
    >>> b=unicode(a, 'cp936')
    >>> b
    u'u4e2du56fd'
    >>> c = b.encode('utf-8')
    >>> c
    'xe4xb8xadxe5x9bxbd'
    >>> d = b.encode('cp936')
    >>> d
    'xd6xd0xb9xfa'

    加上unihan的数据库,得知b包含的实际上是那个decimal值,等同于utf-16编码,c包含的是utf-8编码,d包含的就是gb2312编码了。关于unicode在python内部的表示(即用unicode()函数转换的结果),就是那个唯一的Decimal值,等同于utf-16。当然,UTF和Unicode并不是同样的事物,后者是前者的变换格式。我的理解对吗?

    另外,"cp936"能够用于Linux系统吗?

    还有一个问题请教一下:
    python的unicode()函数和字符串对象的encode()方法能否介绍一下?主要是它们的作用以及能够接受的Encoding。

    真的是非常感谢了。澄清了一个重要概念。

    P.S 《无废话XML》中有一章专门介绍Unicode。它里面就把UTF-8, UTF-16, Unicode的关系说得很清楚了。对照这片帖子二位的解说,我想大家都会像我一样,学到不少东西的。
    =========================

    又试了一下,对于unicode()函数,

    主要用到两个参数:原字符串,编码

    比如‘'中'字的utf-8编码是:xe4xb8xad,
    这时,unicode('xe4xb8xad', 'utf-8')的结果就是'中'字的unicode,为:u'u4e2d'.
    即参数中的'utf-8'用来指出前面那个串的编码是什么。而unicode()的作用就是按照这个编码来解释第一个参数,并且返回它的unicode形式。

    但是对于u"xxx"的形式还未理解,对于str.encode()也没有理解……
    =============================
    你说的内部的unicode编码是使用utf-16应该是对的。

    我一般将一个字符串转为unicode都使用unicode(str, encoding)
    而将一个unicode转为其它的编码使用unistr.encode(encoding)

    u"xxx"是python中用来表示字符的内部编码的一种表示方法。

    在linux下没有cp936的使用。这一点在我的blog上有说明:http://www.donews.net/limodou/archive/2004/08/13/67432.aspx

    因此要使用要不自已搞一个gbk的编码模块,要不使用cjk模块。

    ================================
    Code:

    #coding:utf-8
    #指定本文件编码为utf8
    import os
    # 以下为示例代码,不一定能运行。随意写的,无编译运行过。
    # 例子以XP平台为例,因为linux平台编码(UTF-8)与window平台(GBK)不一样。
    # 假设D盘下面有很多中文名称文件
    filelist = os.listdir(r"d:\") # 此处返回的list中的中文是以GBK编码的,你可以通过查看cmd窗口属性看到。
    for path in filelist:
    if os.path.isdir(path): continue
    fp = open(path.decode("GBK") , 'rb') # 如果此处用 path.decode("UTF-8") 就会抛异常,原因是wind的dir命令返回的是GBK编码
    print len(fp.read())
    fp.close()
    filepath =r"d:\中文文件.doc" # 假设此文存在,记得要带中文
    fp = open(filepath.decode('utf-8'), "rb") #这里使用utf8参数进行解码,原因是文件头里有句coding: utf-8
    print len(fp.read())
    fp.close()
    path2 = u"d:\中文文件.doc" # 假如这里有个u在前面,这个变量就是unicode编码了,不用解码。
    fp = open(path2, 'rb')
    print len(fp.read())
    fp.close()
  • 相关阅读:
    034.Python的__str__,__repr__,__bool__ ,__add__和__len__魔术方法
    033.Python的__del__析构方法he__call__方法
    032.Python魔术方法__new__和单态模式
    python3使用tabulate漂亮的打印数据
    在Linux真正有效的调节鼠标速度!
    RouterOS上实现内网DNS劫持
    使用grease monkey强力清除搜索结果页的广告
    centos 6.5 apache下配置python cgi 并解决中文乱码
    python的缩进语法不是一种好的设计
    让npm默认使用taobao镜像源
  • 原文地址:https://www.cnblogs.com/dkblog/p/1980643.html
Copyright © 2020-2023  润新知