[Python学习]Unicode及编码处理心得: 编辑
如何处理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有这方面的介绍:
同时在linuxforum.net上的python版有关于u
希望本文对你有帮助。
如果,您希望更容易地发现我的新文章,不妨点击一下绿色通道的【关注我】,亦可微信搜索公众号「大白技术控」关注我。
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?