`
ppjava
  • 浏览: 135671 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

python unicode及编码处理

阅读更多

这是一篇我发表在 Python.cn 邮件列表上,现在放在Blog作一个记录,略作整理。

<!---->如何处理unicode及其它的编码,其实这个问题想明白了很简单:

  1. 字符串有很多的编码
  2. 不同的系统和平台有各自的编码
  3. 为了实现系统或平台之间的信息交互可能需要编码转换
  4. 基本上在两个处理环节上进行转换:你的系统从其它系统读 你的系统从其它系统写
  5. 根据需要进行从源头到目标系统的编码转换

那么常见的环节都有哪些呢,我只能从经验上来回答了?如 NewEdit 使用 wxPython 的unicode版本,那么首先要明白,所有wxPython自带的函数和类都是使用unicode的,哪怕是打开文件对话框这样的从外部输入的类也会自动将文件名转为unicode。然后可能的环节有:

  • 使用python的自带模块操作文件系统,如:file()和操作目录等
  • 使用socket发送和接收数据

总之是调用非wxPython的东西都可能需要编码转换

再如XML的处理也是经常有人问的。你应该要记住,当一个XML报文从文件被解析成DOM树时,所有的文本信息都被处理为unicode。然后再考虑与外部环境的交互,看一看是否需要进行编码转换。

在明白有可有需要进行编码转换的地方后,再考查到底需不需要进行编码转换。当调用的内容与你的系统编码一致时,并不需要转换。那么对方系统到底要什么样的编码呢,那只能仔细看文档,靠你的经验,靠你多做测试。而且根据python所报出来的错误一般也可以判断出来。那么当发现需要编码转换时,剩下的就是如何正确进行码制转换。

再举例说明,如你的系统为unicode编码。那么数据有两个流向,一种是调用各种内部或外部的方法来得到数据,这就是读操作。如果是调用系统内的函数,如调用wxPython自已的函数,你可以认为它返回的都是unicode,这样你的系统也为unicode,因此不需要转换。但如果调用的函数返回非unicode,一般需要转换。为什么说一般呢?因为如果返回的是英文串的话,不转换也不会出来,但对于包含中文的情况是会出错的。另一种流向是把系统中的数据传入一个方法中进行处理,这就是写的操作。如果调用的是系统内部的方法,如调用wxPython的方法,你可以认为这个方法需要unicode编码,而数据又是系统中的,因此编码都是unicode,不需要转换。但如果你调用的方法要求其它的编码时,一般需要进行编码转换。对于亚洲语言是特别要考虑这个问题。

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

  • 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)

 

分享到:
评论

相关推荐

    Unicode汉字编码表.doc

    国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。兼容GBK和GB2312字符集。

    Python中文本编码官方文件(howto-unicode)

    Python官方解答unicode编码基本知识以及常见问题的处理。对于深入理解Unicode编码十分重要。

    Python3的unicode编码转换成中文的问题及解决方案

    主要介绍了Python3的unicode编码转换成中文的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    python实现unicode转中文及转换默认编码的方法

    主要介绍了python实现unicode转中文及转换默认编码的方法,结合实例形式分析了Python针对Unicode编码操作的相关技巧及编码转换中的常见问题解决方法,需要的朋友可以参考下

    Python 编码处理-str与Unicode的区别

    整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,http参数等等 一运行,发现乱码(字符串处理,读写文件,print) 然后,大多数人的做法是,调用...

    20180530_Python编码及中文乱码1

    ·我们的Python3默认就是Unicode编码编码与解码·Python关于编码和解码对应的函数分别是encode()和decode(),对应编码和解码·pyt

    Python中GBK, UTF-8和Unicode等编码问题.tmp

    Python中GBK, UTF-8和Unicode等编码问题.tmp

    Python编码及字符集示范代码

    初学者在使用Python进行中文输出时可能会遇到乱码问题,这是由于中文有国标和Unicode编码2种形式,此外,代码文件编码格式和系统内部编码格式也会影响输出。此示范代码用于帮助初学者了解编码,以便在之后的编程中能...

    Unicode和Python的中文处理

    在Python语言中,Uincode字符串处理一直是一...许多Python爱好者经常因为搞不清Unicode、UTF-8还有其它许许多多的编码之间的区别而大伤脑筋。本文将介绍Unicode和Python的中文处理的相关知识。下面跟着小编一起来看下吧

    Python编码器RotUnicode.zip

    RotUnicode 是一个 Python 的编码器可将 ASCII 字符串转成 Unicode 并保留非 ASCII 字符的可读性。 示例代码: &gt;&gt;&gt; import codecs &gt;&gt;&gt; from box.util.rotunicode import RotUnicode &gt;&gt;&gt; codecs.register...

    Python3中编码与解码之Unicode与bytes的讲解

    今天小编就为大家分享一篇关于Python3中编码与解码之Unicode与bytes的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    学习python处理python编码问题

    概括、从python1.6开始就可以处理unicode字符了。 一、几种常见的编码格式。 1.1、ascii,用1个字节表示。 1.2、UTF-8,用1个至三个字节表示,表示ascii码时只占用1个字节,ascii编码是UTF-8的子集。 1.3、UTF-16,用2...

    浅析Python 字符编码与文件处理

    python3默认的字符编码方式是Unicode .py文件头部的#coding:utf-8是帮助python识别.py文件的编码方式,故在写.py文件时要注意文件头和文件保存时的编码方式要相同,否则可能会出现乱码 python程序运行过程: python...

    python编码总结(编码类型、格式、转码)

    本文详细总结了python编码。分享给大家供大家参考,具体如下: 【所谓unicode】 unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是它只是一种内部...

    python中文编码与json中文输出问题详解

    前言 python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串...(1)通用的Unicode编码; (2)将Unicode转化为某种类型的编码,如UTF-8,

    python自然语言编码转换模块codecs介绍

    python的内部是使用unicode来处理的,但是unicode的使用需要考虑的是它的编码格式有两种,一是UCS-2,它一共有65536个码位,另一种是UCS-4,它有2147483648g个码位。对于这两种格式,python都是支持的,这个是在编译...

    python解决汉字编码问题:Unicode Decode Error

    最近在利用python读取一个含有汉字的文档时导致出现了乱码,并报出了两个错误,无奈只能上网找寻答案,后通过网友的帮助解决了这个问题,想着总结一下,下面这篇文章就主要介绍了python如何解决汉字编码问题,有需要...

    Python字符编码判断方法分析

    本文实例讲述了Python字符编码判断方法。分享给大家供大家参考,具体如下: 方法一: isinstance(s, str) 用来判断是否为一般字符串 isinstance(s, unicode) 用来判断是否为unicode 或 if type(str).__name__!=...

Global site tag (gtag.js) - Google Analytics