[Python学习]Unicode及编码处理心得
来源:互联网 发布:中国十大徒步 知乎 编辑:程序博客网 时间:2024/04/27 14:02
这是一篇我发表在 Python.cn 邮件列表上,现在放在Blog作一个记录,略作整理。
如何处理unicode及其它的编码,其实这个问题想明白了很简单:
- 字符串有很多的编码
- 不同的系统和平台有各自的编码
- 为了实现系统或平台之间的信息交互可能需要编码转换
- 基本上在两个处理环节上进行转换:你的系统从其它系统读 你的系统从其它系统写
- 根据需要进行从源头到目标系统的编码转换
那么常见的环节都有哪些呢,我只能从经验上来回答了?如 NewEdit 使用 wxPytho
- 使用python的自带模块操作文件系统,如:file()和操作目录等
- 使用socket发送和接收数据
总之是调用非wxPython的东西都可能需要编码转换
再如XML的处理也是经常有人问的。你应该要记住,当一个XML报文从文件被解析成DOM树时,所有的文本信息都被处理为unicode。然后再考虑与外部环境的交互,看一看是否需要进行编码转换。
在明白有可有需要进行编码转换的地方后,再考查到底需不需要进行
再 举例说明,如你的系统为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与utf-8,utf-16有什么区别呢。我认为unicode可以称为抽象编
除上以上的编码方法,在读写文件时还可以使用codecs的op
另外我以前写过几篇blog有这方面的介绍:
- [Python学习]在程序中简单地定义unicode汉字
- [wxPython学习]unicode文本写入文件的处理
- [Python学习]再谈文件编码的处理
- 使用locale判断本地语言及编码
- [Python学习]Unicode及编码处理心得
- [Python学习]Unicode及编码处理心得
- 接Unicode及编码处理心得
- python 学习~unicode 编码
- python学习之unicode编码
- Python 中的 str 与 unicode 编码处理
- python unicode 及解码编码方式简介
- Unicode编码的使用心得及Unicode格式的INI文件
- Unicode编码的使用心得及Unicode格式的INI文件
- python处理网页时的unicode编码问题
- python中的unicode编码
- Python编码和Unicode
- Python编码和Unicode
- python 的unicode编码
- Python编码和Unicode
- python unicode编码转换
- Python学习笔记 --- 异常处理心得
- 学习python处理python编码问题
- 设计模式之: abstract factory
- vi入门――巧表单方法【图文】
- 关于WebService传递自定义对象的问题
- SQL Functions
- Oracle DATA数据类型中计算时间差
- [Python学习]Unicode及编码处理心得
- 二进制字符串数据转换为16进制数据
- 数学规划模型的matlab求解
- 初学者不得不看:linux入门11点建议
- 快男陈楚生与其女友主唱《QQ自由幻想》主题曲事件曝光!
- ORACLE日期类型的计算
- JAVASCRIPT小示例
- 我的心情深度郁闷,HP笔记本 你是我噩梦的开始吗?如果是噩梦的话那么我希望能快点醒来吧!
- 编写易于理解代码的六种方式