位置: 编程技术 - 正文

python黑魔法之编码转换(python黑魔法手册)

编辑:rootadmin

推荐整理分享python黑魔法之编码转换(python黑魔法手册),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python魔法方法str,python魔法方法str,python 黑魔法指南,python 黑魔法,黑魔法的代码,python 黑魔法,python 黑魔法,python黑魔法手册 pdf,内容如对您有帮助,希望把文章链接给更多的朋友!

我们在使用其他语言的库做编码转换时,对于无法理解的字符,通常的处理也只有两种(或三种):

抛异常 替换成替代字符 跳过

但是在复杂的现实世界中,由于各种不靠谱,我们处理的文本总会出现那么些不和谐因素,比如混合编码。在这种情况下,又回到了上面的处理办法。

那么问题来了,python有没有更好地办法呢?

答案是,有!

python的编码转换流程实际上是两段式转换:

首先将字符串从原始编码转换成unicode。再将unicode转换成目标编码。

第一步我们一般采用decode()或者 unicode() 这两个函数完成。第二步我们使用encode()函数完成。

在这里我们说的黑魔法就是在第一步实现。

python黑魔法之编码转换(python黑魔法手册)

decode和unicode函数都有一个叫做errors的可选参数。看看官方的描述:

errors may be given to set a different error handling scheme. Default is 'strict' meaning that encoding errors raise a UnicodeDecodeError. Other possible values are 'ignore' and 'replace' as well as any other name registered with codecs. register_error that is able to handle UnicodeDecodeErrors.

这个参数通常有三种值:

strict 默认值。如果出现编码错误,则会抛出UnicodeDecodeError。 ignore 跳过。 replace 用&#;替换。

好了,看到最后一句话了吗?好戏上演了!

模块codec有一个函数叫做register_error。他的作用让用户可以注册自定义的errors处理方法。用来处理UnicodeDecodeError。

我们看看函数原型:

name: 错误处理的名称。用以填写在decode函数的error参数中。error_handler: 处理函数。该函数接受一个异常参数。返回一个tuple,该tuple有2个元素,第一个是纠错后的字符串,第二个是继续decode的起始位置

有了上面的基本概念。我们看下具体实现:

上面这个是我从网上copy的。开始我觉得很不错,但是后来发现是个很不经推敲的算法。比如utf8和gbk在前两个字节就有交集的部分。当一个utf8的字符串以gbk编码decode的时候,出现错误是从第三个字节开始(前两个字节也能够在gbk编码范围中对应到一个汉字)。如:

所以针对这种情况,做了下改进:

当然,这个逻辑其实还是不够严谨的。虽然对于这种混合编码这种畸形活处理有点较真儿。不过既然python提供这样的能力,大家可以一起来讨论下,我们怎么可以做的更好&#;

在MAC上搭建python数据分析开发环境 最近工作转型到数据开发领域,想在本地搭建一个数据开发环境。自己有三年python开发经验,马上想到使用numpy、scipy、sklearn、pandas搭建一套数据开发环

python中的编码知识整理汇总 问题在平时工作中,遇到了这样的错误:UnicodeDecodeError:'ascii'codeccan'tdecodebyte想必大家也都碰到过,很常见。于是决定对python的编码做一个整理和学习。

Python函数中*args和**kwargs来传递变长参数的用法 单星号形式(*args)用来传递非命名键可变参数列表。双星号形式(**kwargs)用来传递键值可变参数列表。下面的例子,传递了一个固定位置参数和两个变长参

标签: python黑魔法手册

本文链接地址:https://www.jiuchutong.com/biancheng/381311.html 转载请保留说明!

上一篇:Python编程中对文件和存储器的读写示例(python文法)

下一篇:在MAC上搭建python数据分析开发环境(mac怎么编写python)

  • 未按规定缴纳保险
  • 嵌入式软件产品即征即退
  • 小规模未达到起征点申报表怎么填
  • 成品油发票怎么查询
  • 金蝶可以自动结转成本吗
  • 修缮服务开票项目一览表
  • 个体工商户开普票流程
  • 物流辅助服务属于什么费用
  • 异地成立分公司
  • 哪些属于不动产权
  • 存货盘盈属于什么活动
  • 资产减值损失确认后,减值资产的折旧
  • 建筑清包工的账务处理
  • 失业社保补助金领取条件
  • 食堂收取单位餐费需要开发票吗?
  • 公司企业变更后原来的营业执照还有吗
  • 外帐的倒推流程是什么
  • 存货的计税价格是什么
  • 个税起征点是多少啊
  • 收到退印花税款怎么入账
  • 固定资产直接进费用违背什么
  • 1697508432
  • 1697509550
  • 以前年度损益调整会计分录
  • 自主研发全流程
  • uefi系统安装win7gho
  • win8的无线设置
  • 代开的发票没有人名行不行?
  • schost.exe - schost是什么进程 有什么用
  • 增值税进项税抵扣销项税
  • 账务处理程序有什么
  • 自产产品管理部门领用
  • 数据库操作实例
  • php关键字描红
  • 写字楼租赁房产税
  • laravel5.2实现区分前后台用户登录的方法
  • css滚动条自动滚动
  • php注释有几种?如何表示?
  • 应收利息罚息什么意思
  • 织梦官方网站
  • 基本运算符号有乘方吗
  • phpcms使用教程
  • python 动态
  • 员工意外伤害保险可以抵扣进项税吗
  • 餐具报损率一般为多少
  • 微小企业开票一天可以开多少钱
  • 企业怎么开启承兑业务
  • 新会计准则套期利息计算
  • 合并报表调整分录理解
  • 管理费用核算的是
  • 事业单位出售废品流程
  • 房地产开发的土地分割
  • 未担保余值举例
  • 交增值税怎么做帐
  • 留抵税额和待抵扣进项税额区别
  • 固定资产转为投资的条件
  • 股东退股如何清算
  • 期初建账怎么做
  • 公司如何做账本
  • 在sql server中关于数据库的说法正确的是
  • 去大城市发展成功的例子
  • ubuntu20.04怎么用
  • 开机出现系统错误怎么办
  • os x10.11el capitan公测版beta2官方下载地址
  • win10打开软件提示允许此应用对你设备进行更改
  • Linux一键安装ftp
  • win10如何关闭windows
  • 苹果发布首款MR头显
  • win7c盘winsxs
  • win7调出ie浏览器
  • win8怎么禁止弹窗
  • linux dhcpv6
  • win10更新补丁后共享打印机无法使用
  • cocos2d-x 3.4 windows 环境配置
  • bootstrap入门
  • 物业收电费有什么猫腻
  • 买房送地下室土地可以吗
  • 如何查询税控盘是否注销成功
  • 代销手续费增值税会计处理
  • 18个税种征税范围
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设