`

开发笔记:Python的转码

阅读更多

字符串内码的转换,是开发中经常遇到的问题。
在Java中,我们可以先对某个String调用getByte(),由结果生成新String的办法来转码,也可以用NIO包里面的Charset来实现
在Python中,可以对String调用decode和encode方法来实现转码。
比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作
s.decode('gbk').encode('utf-8')

可是,在实际开发中,我发现,这种办法经常会出现异常:
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 30664-30665: illegal multibyte sequence

这 是因为遇到了非法字符——尤其是在某些用C/C++编写的程序中,全角空格往往有多种不同的实现方式,比如\xa3\xa0,或者\xa4\x57,这些 字符,看起来都是全角空格,但它们并不是“合法”的全角空格(真正的全角空格是\xa1\xa1),因此在转码的过程中出现了异常。

这样的问题很让人头疼,因为只要字符串中出现了一个非法字符,整个字符串——有时候,就是整篇文章——就都无法转码。

幸运的是,tiny找到了完美的解决办法(我因此被批评看文档不仔细,汗啊……)
s.decode('gbk', 'ignore').encode('utf-8')

因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;
如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。
分享到:
评论

相关推荐

    cev_python3:Curso de Python3做Curso em视频

    Python作为一种通用编程语言,不仅在数据科学、Web开发和自动化等领域广泛应用,而且在多媒体处理方面也日益受到重视。以下是你在这个课程中可能会学到的一些关键知识点: 1. **Python基础知识**:首先,你需要掌握...

    180+个Python开源项目,涉及15个主题应用

    * GNU Radio:一个软件开发工具包,可以提供信号处理模块以实现软件定义的无线电和信号处理系统。 * Friture:可以实时恩熙和可视化音频数据,包括示波器、频谱分析仪等。 视频(4) * Pitivi:一个基于 GStreamer...

    02视频网站笔记+代码.zip

    【标题】"02视频网站笔记+代码.zip" 涉及的知识点主要集中在视频网站的构建、开发工具的使用以及可能包含的源代码分析。这个压缩包包含了学习和实践视频网站开发的重要资源。 首先,"VS Code介绍.pdf" 提供了关于...

    苍穹外卖阿里云oss存储笔记

    在"苍穹外卖阿里云oss存储笔记"中,我们可以深入探讨关于阿里云OSS的使用和管理。 1. **对象存储概念**:对象存储是一种基于网络的数据存储方式,不同于传统的文件系统或块存储,它以对象为基本单位进行数据管理。...

    图灵商城 代码,笔记,资料

    8. **后端服务**:可能包括上传、转码、鉴权、计费等服务,涉及的技术栈可能涵盖Python、Java、Node.js等后端语言和框架,如Django、Spring Boot、Express。 9. **前端界面**:UI设计和交互体验对于用户来说非常...

    iSub-Music-Streamer-old-example:笔记-Information release source code

    【标题】"iSub-Music-Streamer-old-example:笔记-Information release source code"涉及的知识点主要围绕音乐流媒体服务和开源系统开发。这个项目可能是针对一个旧版本的iSub-Music-Streamer,它是一个用于播放音乐...

    软件设计师中级王勇老师课程笔记-7法律法规+多媒体基础

    常见的编程语言可以分为编译型语言(如C++、Java等)和解释型语言(如Python、JavaScript等)。了解它们之间的区别及适用场景有助于软件设计师在项目初期做出更合理的选型。 #### 语言处理工具 语言处理工具主要...

Global site tag (gtag.js) - Google Analytics