位置: 编程技术 - 正文

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)

  • 实收资本印花税最新规定
  • 嵌入式软件产品的增值税即征即退具体实例
  • 计提所得税比实际缴纳的少
  • 进项有留底怎么结转
  • 承销债券收取的承销费属于什么收入
  • 查看企业用什么软件
  • 加盟费是怎么回事
  • 委托开发的定义
  • 城市维护建设税优惠政策
  • 年初数和年末数审计报告不一致
  • 怎么理解捐赠支出税前扣除标准计算口径
  • 民办非企业单位是什么单位性质
  • 旧税号开出的发票能认证抵扣吗?
  • 支付运费价税合计
  • 个人所得税申报方式选哪个比较好
  • 营改增账务处理举例
  • 对公账户钱怎么退回去
  • 预收账款属于金融资产吗为什么
  • 固定资产处理怎么入账
  • 福利费提取后未使用能否税前扣除?
  • 中央空调使用费怎么开发票
  • 损失与费用的区别
  • 工资结算天数
  • 穿越火线下载安装
  • 在win7系统中如何让电脑恢复出厂设置方法
  • 只有发票没有银行客户专用回单是啥意思
  • u8销售类型怎么设置
  • 弗拉维亚王朝
  • 房产企业预售收入怎么做账务处理
  • vue报错cannot read property
  • EMQX(MQTT)----基本用法以及使用Python程序进行模拟流程
  • 企业会计准则存在的问题怎么写
  • 持有待售资产是流动还是非流动
  • 成本价低于现价 应该卖吗
  • 已知税额和不含税额求税率
  • python累加求和代码,直到最后一项小于10^-6
  • 低值易耗品五五摊销法怎么计算
  • 快递代收费用是多少
  • 小企业会计准则和一般企业会计准则的区别
  • php视频加水印
  • 筹建期所得税年度申报如何填列
  • 经营租入的设备属于什么会计要素
  • 借款合同印花税优惠政策
  • 开普票需要公对公吗
  • 基本生产成本核算的内容
  • 现金流量表的编制公式 计算公式
  • 当月计提的工资,次月申报吗
  • 零余额账户用款额度是什么意思
  • 待抵扣进项税额和进项税额的区别
  • 进项税转出怎样做账务处理
  • 医保卡里收入和余额不一样
  • 电子银行承兑汇票怎么签收
  • 本年利润的借方科目
  • 发票已开的情况下不确认收入可以吗?
  • 注销企业基本户销户规定
  • 一个身份证可以实名几个qq
  • 工业企业应付账款怎么算
  • Mysql中LAST_INSERT_ID()的函数使用详解
  • WinCinemaMgr.exe - WinCinemaMgr是什么进程
  • win8点击桌面没反应
  • ubuntu下安装windows
  • ubuntu如何安装wps
  • win8怎么设置
  • 2021年win10新系统版本
  • win8搜索不到自己家的WiFi
  • win10查看驱动
  • win8.1备份系统还原
  • win8任务栏在底部不显示
  • unity editor window
  • javascript教程完整版
  • windows和linux的区别
  • 安卓手机查看sd卡
  • python组合运算
  • javascript缓存
  • 机票电子发票怎么作废
  • 安徽省税务局发票真伪查询平台
  • 国家税务局关于印发的通知
  • 重庆准生证网上怎么申请领取
  • 税收与税务的区别是什么
  • 城市维护建设税税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设