位置: 编程技术 - 正文

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)

  • 汇兑记载事项及使用注意事项
  • 防伪开票系统技术维护费怎么做分录
  • 小规模无进项怎么补税
  • 个体户没有办税务登记,产生的房土两税
  • 费用已付发票未到的预算会计分录
  • 小规模纳税人核算方式选什么
  • 一般纳税人所得税是季报还是月报
  • 运输企业桥票怎么做会计分录
  • 发放工资比计提工资少了
  • 设备租赁费开票属于哪个大类
  • 去国税申请开票需要法人和财务去吗?
  • 抄税忘记了怎么办
  • 应纳所得税额除以收入等于什么
  • 个体工商户税收标准2023年
  • 税控机操作
  • 劳务派遣劳务费发票怎么开
  • 红字增值税专用发票信息表能作废吗
  • 企业所得税可以弥补几年亏损
  • 小规模纳税人自己可以开专票吗
  • 办税人员的职责和义务
  • 企业注销后注册资金取出需要交税吗
  • 增值税普通发票有什么用
  • 生产成本期末余额在贷方
  • Win11安装如何跳过以太网
  • PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
  • 未开票的销售收入分录
  • explorer进程作用
  • 残疾人增值税即征即退政策2020
  • el-upload上传文件大小限制
  • 待抵扣进项税额什么意思
  • ci框架api版本
  • 车辆购置税发票图片
  • typescript完全解读
  • vmware workstation pro怎么卸载干净
  • 上市公司股票转让收入
  • 免征的教育费附加怎么做账
  • python中fork函数
  • DedeCMS V5.7 SP2前台文件上传漏洞
  • 占地面积法如何分摊土地成本
  • 未交增值税借方余额怎么调整
  • 新会计准则套期利息计算
  • 2021年财政部令68号
  • 用房子贷款印花税怎么算
  • 企业购买黄金可以避税
  • 基本户和零余额可以是一个账号么
  • mysql5.6设置密码
  • 兼职劳务费个税计算器
  • 房地产开发产品科目设置
  • 私车公用的风险防范
  • 事业单位之间调动难吗
  • 民间非营利政府是指什么
  • 捐赠货物的账务处理和纳税调整
  • 企业收到政府补助金80 000元,存入银行
  • 房屋租赁费可以抵扣吗
  • 餐厅的租金是多少钱一个月
  • 其他应付款包括哪些内容
  • 应收利息和利息收入的差额
  • 哪些业务需要计提国别风险准备金
  • 国有资产无偿划转税收政策
  • 其他权益工具是所有者权益类科目吗
  • truncate可以删除部分数据
  • 高危禁止安装怎么解除
  • linux例子
  • 如何在windows沙盒中导入文件
  • realjbox.exe - realjbox是什么进程 作用是什么
  • win8如何使用word
  • win8没有开始菜单 点键盘开始菜单黑屏
  • opengl示例
  • Android开源ui框架
  • python中map函数功能
  • Javascript selection的兼容性写法介绍
  • python关键字none
  • js 在线调试
  • python中的字典怎么用
  • jquery formatter
  • ActivityManager: Warning: Activity not started, its current task has been brought to the front 的的问题
  • 税务ukey怎么升级不了
  • 北京国税发票查询真伪查询
  • 留抵税额怎么形成的
  • 建筑行业增值税税率2021
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设