`
ppjava
  • 浏览: 138357 次
  • 性别: 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)

 

分享到:
评论

相关推荐

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

    Python官方的这篇HOWTO文档《Python中文本编码官方文件(howto-unicode)》详细地介绍了Unicode编码的基本知识以及Python对Unicode的支持,这对于深入理解Unicode编码机制以及处理常见的编码问题极为重要。...

    Unicode中文编码对照表

    标签“源码”暗示了这个话题可能涉及到编程和代码实现,可能讲解了如何在编程语言中使用Unicode编码来处理中文字符,例如Java、Python或C++。而“工具”标签则可能意味着存在某种工具或库,可以帮助开发者进行...

    Unicode汉字编码表.doc

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

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

    在处理Python3的unicode编码转换为中文时,我们经常遇到的问题是,当我们尝试将包含unicode字符的字符串打印或者写入文件时,Python解释器有时并不会如我们所预期地将其转换为中文显示。这种现象尤其在从网络爬虫...

    Unicode解码编码_unicode解码_unincode转换_Unicode解码编码_源码

    3. **转换过程**:在编程中,如Python中,可以使用内置的`encode`和`decode`函数进行Unicode编码和解码。例如,`str.encode('utf-8')`将字符串编码为UTF-8,而`bytes.decode('utf-8')`将UTF-8字节解码回字符串。在...

    gb18030的汉字编码,Unicode汉字编码表

    Unicode编码的常见形式有UTF-8、UTF-16和UTF-32。 在编程中,字符集问题通常涉及到编码的转换、读写文件、网络数据传输等方面。例如,当你从GBK编码的文本文件读取数据并试图在UTF-8编码的程序中处理时,必须进行...

    PythonUnicode字符1

    Python作为一种高级编程语言,在处理国际化文本方面具有强大的能力,尤其是在处理Unicode字符方面表现突出。本文将深入探讨Python中如何使用Unicode字符,并通过示例来解释其工作原理。 #### 二、什么是Unicode? ...

    20180530_Python编码及中文乱码1

    Python3中,字符串(str)默认为Unicode编码,而字节(bytes)用于存储原始字节数据。编码使用`encode()`函数,将str转换为bytes;解码使用`decode()`函数,将bytes转换回str。 在Python2中,有str和unicode两种字符串...

    中文unicode编码表.rar

    在编程语言中,如Python、Java等,都有内置对Unicode的支持,可以直接处理和操作Unicode编码的字符串。 了解并掌握中文Unicode编码表,对于从事IT行业的人员来说,无论是进行网页开发、数据处理还是软件设计,都是...

    Unicode编码转换源码

    Unicode编码是一种国际标准,旨在解决不同语言和字符集之间的兼容性问题。Unicode编码转换源码主要关注如何在不同的编码格式之间进行转换,如从普通字符到Unicode,以及从Unicode到UTF-8编码。 首先,我们来了解...

    unicode编码eclipse插件

    为了解决这个问题,我们需要一个能够识别并正确处理Unicode编码的Eclipse插件。标题中的"unicode编码eclipse插件"正是为此目的而设计的,它可以帮助开发者在Eclipse中顺畅地编辑和查看含有Unicode字符的properties...

    python查询笔画数(含汉字编码表)

    在Python编程语言中,查询汉字的笔画数是一项常见的任务,尤其在中文处理或数据分析时。这个主题涉及到几个关键知识点,包括Python的字符串操作、汉字编码以及如何利用数据资源来获取汉字笔画信息。 首先,我们需要...

    Python设置默认编码为utf8的方法

    在Python编程中,编码问题是一个常见的挑战,特别是在处理多语言或者跨平台的数据时。UTF-8编码是一种广泛使用的字符编码标准,能够表示Unicode字符集中的所有字符。在Python中,虽然默认的源代码编码是ASCII,但...

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

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

    python3 unicode列表转换为中文的实例

    总的来说,Python3提供了强大的字符串处理能力,能够方便地处理Unicode编码。在处理网络爬虫数据时,理解如何转换和处理Unicode字符串是非常重要的。在上述示例中,我们学习了如何通过`encode`和`decode`方法将...

    Unicode 5.1 字符编码分解表

    - **软件开发**:编程语言和库(如Java, Python, JavaScript)都依赖于Unicode进行文本处理。 - **数据库和搜索引擎**:确保跨语言的正确索引和查询。 - **国际化的网页**:支持多种语言的网页内容显示。 - **字体...

    Python文本模式匹配与TXT文件编码类型的识别.pdf

    识别了带BOM标志的各种Unicode编码的TXT文件,对不带BOM标志的TXT文件区分UTF-8和ANSI编码进行了详细的讨论,并给出了具体实现"揭示了文档将围绕Python语言在文本处理方面的两个重要知识点进行详细讨论:文本模式...

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

    ### Python 实现 Unicode 转中文及转换默认编码的方法 #### 概述 在实际开发过程中,特别是处理网络爬虫时,经常会遇到 Unicode 编码的字符串需要转换为中文的情况。此外,在 Python 2.x 版本中,由于默认编码为 ...

    Unicode和GBK编码转换表

    由于GBK是在Unicode出现之前制定的,所以它没有完全遵循Unicode的编码规则,这就导致了在处理GBK编码和Unicode编码的文本时可能需要进行转换。 GSM中文字库则是针对手机等移动设备设计的一种字符编码,主要用于短信...

    chardet-1.0.1.tar.gz 自动检测python汉字编码辅助

    完成这些步骤后,`chardet` 就可以在Python项目中使用了,为处理汉字编码问题提供了强大的支持。总的来说,`chardet` 是Python处理编码问题的一个重要工具,尤其在与HTML解析相关的场景中,它极大地提高了代码的健壮...

Global site tag (gtag.js) - Google Analytics