位置: 编程技术 - 正文

python3编码问题汇总(python的编码)

编辑:rootadmin

推荐整理分享python3编码问题汇总(python的编码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python编码问题怎么解决,python3 编码,python编码问题怎么解决,python 编码问题,python编码函数,python编码的编码规范,python编码规则,python3 编码问题,内容如对您有帮助,希望把文章链接给更多的朋友!

这两天写了个监测网页的爬虫,作用是跟踪一个网页的变化,但运行了一晚出现了一个问题。。。。希望大家不吝赐教!我用的是python3,错误在对html response的decode时抛出,代码原样为:

抛出错误为

之前运行都没问题,经过一晚上就出现了。。。。最不明白的是在它声明为utf-8编码的网页中为什么会出现utf-8无法解析的字符?

后来经过热心网友的提醒,才发现需要使用decode('utf-8', 'ignore')

为了彻底闹明白python的编码问题,特分享下文,希望对大家熟悉python的编码问题带来些帮助

1.从字节说起:

一个字节包括八个比特位,每个比特位表示0或1,一个字节即可表示从到共2^8=个数字。一个ASCII编码使用一个字节(除去字节的最高位作为作奇偶校验位),ASCII编码实际使用一个字节中的7个比特位来表示字符,共可表示2^7=个字符。比如ASCII编码中的(即十进制的)表示字符'A',加上之后的(即十进制的)表示字符'a'。现在打开Python,调用chr和ord函数,我们可以看到Python为我们对ASCII编码进行了转换。如图

第一个表示空字符,因此ASCII编码实际上只包括了 字母、标点符号、特殊符号等共个字符。因为ASCII是在美国出生的,对于由字母组成单词进而用单词表达的英文来说也是够了。但是中国人、日本人、 韩国人等其他语言的人不服了。中文是一个字一个字,ASCII编码用上了浑身解数个字符都不够用。

因此后来出现了Unicode编码。Unicode编码通常由两个字节组成,共表示*个字符,即所谓的UCS-2。某些偏僻字还会用到四个字节,即所谓的UCS-4。也就是说Unicode标准也还在发展。但UCS-4出现的比较少,我们先记住: 最原始的ASCII编码使用一个字节编码,但由于语言差异字符众多,人们用上了两个字节,出现了统一的、囊括多国语言的Unicode编码。

在Unicode中,原本ASCII中的个字符只需在前面补一个全零的字节即可,比如前文谈到的字符‘a':,在Unicode中变成了 。不久,美国人不开心了,吃上了世界民族之林的大锅饭,原本只需一个字节就能传输的英文现在变成两个字节,非常浪费存储空间和传输速度。

人们再发挥聪明才智,于是出现了UTF-8编码。因为针对的是空间浪费问题,因此这种 UTF-8编码是可变长短的 ,从英文字母的一个字节,到中文的通常的三个字节,再到某些生僻字的六个字节。解决了空间问题,UTF-8编码还有一个神奇的附加功能,那就是兼容了老大哥的ASCII编码。一些老古董软件现在在UTF-8编码中可以继续工作。

注意除了英文字母相同,汉字在Unicode编码和UTF-8编码中通常是不同的。比如&#;汉字的‘中'字在Unicode中是 ,而在UTF-8编码中是 。

我们祖国母亲自然也有自己的一套标准。那就是GB和GBK。当然现在挺少看到。通常都是直接使用UTF-8。

2.Python3中的默认编码

Python3中默认是UTF-8,我们通过以下代码:

可查看Python3的默认编码。&#;

3.Python3中的&#;encode和decode

python3编码问题汇总(python的编码)

Python3中字符编码经常会使用到decode和encode函数。特别是在抓取网页中,这两个函数用的熟练非常有好处。encode的作用,使我们看到的直观的字符转换成计算机内的字节形式。decode刚好相反,把字节形式的字符转换成我们看的懂的、直观的、“人模人样”的形式。

x表示后面是十六进制, xe4xb8xad即是二进制的 。也就是说汉字‘中'encode成字节形式,是 。同理,我们拿 也就是 xe4xb8xad来decode回来,就是汉字‘中'。完整的应该是 b'xe4xb8xad',在Python3中, 以字节形式表示的字符串则必须加上 前缀b,也就是写成上文的b'xxxx'形式。

前文说的Python3的默认编码是UTF-8,所以我们可以看到,Python处理这些字符的时候是以UTF-8来处理的。因此从上图可以看到,就算我们通过encode('utf-8')特意把字符encode为UTF-8编码,出来的结果还是相同:b'xe4xb8xad'。

明白了这一点,同时我们知道&#;UTF-8兼容ASCII,我们可以猜想大学时经常背诵的‘A'对应ASCII中的,在这里是不是也能正确的decode出来呢。十进制的转换成十六进制是,我们尝试下:

b'x'.decode()

结果如下。果然是字符‘A'

4.Python3中的&#;编码转换

据说字符在计算机的内存中统一是以Unicode编码的。只有在字符要被写进文件、存进硬盘或者从服务器发送至客户端(例如网页前端的代码)时会变成utf-8。但其实我比较关心怎么把这些字符以Unicode的字节形式表现出来,露出它在内存中的庐山正面目的。这里有个照妖镜:

xxxx.encode/decode('unicode-escape')

b'\u4e2d'还是b'u4e2d,一个斜杠貌似没影响。同时可以 发现在shell窗口中,直接输 'u4e2d'和输入b 'u4e2d'.decode('unicode-escape')是相同的,都会打印出汉字‘中', 反而是 'u4e2d'.decode('unicode-escape')会报错。说明 说明Python3不仅支持Unicode,而且一个‘uxxxx'格式的 Unicode字符 可被辨识且被等价于str类型。

如果我们知道一个Unicode字节码,怎么变成UTF-8的字节码呢。懂了以上这些,现在我们就有思路了,先decode,再encode。代码如下:

&#;xxx.decode('unicode-escape').encode()

&#;最后的扩展

还记得刚刚那个ord吗。时代变迁,老大哥ASCII被人合并,但ord还是有用武之地。试试ord('中'),输出结果是。是什么呢,我们再试试hex(ord('中')),输出结果是'0x4e2d',也就是是我们在上文见面了无数次的x4e2d的十进制值。这里说下hex,是用来转换成十六进制的函数,学过单片机的人对hex肯定不会陌生。

最后的扩展,在网上看到的他人的问题。我们写下类似于'u4e2d'的字符,Python3知道我们想表达什么。但是让Python读取某个文件的时候出现了'u4e2d',是不是计算机就不认识它了呢?后来下文有人给出了答案。如下:

Python如何获取系统iops示例代码 iops简介iops主要用在数据方面,这个指标是数据库性能评定的一个重要参考,iops的是每秒进行读写(I/O)操作的次数,主要看随机访问的性能,一般为

Python 编码处理-str与Unicode的区别 一篇关于STR和UNICODE的好文章整理下python编码相关的内容注意:以下讨论为Python2.x版本,Py3k的待尝试开始用python处理中文时,读取文件或消息,http参数等等

python 转换 Javascript %u 字符串为python unicode的代码 web采集的数据为%u6B%u5F0F%u4EBA%u,需要读取并转换为python对象,想了下不调用Javascript去eval,只能自己翻译了。核心代码:importreimportcodecspattern=re.compi

标签: python的编码

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

上一篇:用Python实现命令行闹钟脚本实例(python怎么用命令行)

下一篇:Python如何获取系统iops示例代码(python如何获取系统绝对路径)

  • 税种核定在电子版怎么查
  • 支付企业所得税会计科目
  • 提前买礼物
  • 资产负债表债务法核算所得税
  • 发行股票的手续费计入什么费用
  • 需要冲红的普通发票无法收回怎么办
  • 设备配件定义
  • 科技型中小企业条件
  • 新收入准则建筑企业按完工百分比
  • 承包经营所得发包方如何纳税
  • 原材料呆滞物料处理方法
  • 产业扶持资金管理办法
  • 出口退税销项大于进项,需要交税吗
  • 退货的产品会重新包装吗
  • 注册资本金应该编入政府性基金预算吗
  • 应收款未收到怎么做账
  • 法律责任的具体内容
  • 2021虚开发票案例
  • 没有费用报销单发票可以直接报销吗
  • 贸易公司收到货款会计分录
  • 一般纳税人怎么查询
  • win7 右键 没反应怎么办
  • 局域网内ip地址冲突怎么找出来
  • 核定征收要交企业所得税吗
  • win10永久激活码神key一周内
  • uefi和legacy的区别对显卡兼容
  • 车辆交通罚款怎样避免重复报销
  • 未担保余值通俗理解
  • 在企业兼并时,被兼并企业价值评估的最适用假设是
  • 分配水电费会计分录需要写税吗?
  • yolov5 workers
  • 购买办公用品没收到发票怎么做账
  • 镶嵌在巨石之间的英文
  • 毕业证原件掉了可以报考社工证吗
  • thinkphp项目怎么运行
  • 原生ajax和axios的区别
  • 税控服务费在电子税务局表一里怎么填写
  • 小微企业开具增值税专票
  • js中promise的三种状态
  • SQL(MSSQLSERVER)服务启动错误代码3414的解决方法
  • dedecms插件
  • 个税租房租金扣除规则
  • 国内旅客运输服务
  • sql server 视图排序
  • 入职体检费用报销发票怎么开
  • 增值税申报抵扣联数据没有
  • 发票未及时开,但是双方会计已经做帐,怎么办?
  • 科技项目扶持资金
  • 售后服务期多久
  • 出售投资性房地产的收入计入什么科目
  • 融资租赁收到的租金计入什么科目
  • 印花税的减免
  • 员工垫付的费用会计分录
  • 公司名义送花篮属于什么费用
  • 研发支出资本化支出在资产负债表哪里体现
  • 工业企业自制半导体材料
  • mybatis特殊字符查询出来编码了
  • mysql查看当前执行的sql
  • centos 中文
  • 常见内存大小
  • windows蓝屏代码大全及解决方案
  • win7系统怎么调鼠标
  • centos6 centos7区别
  • centos smb服务
  • win10更新中重启会怎么样
  • javascript语句大全
  • 菜鸟学安卓逆向
  • php获取当前脚本路径
  • java线程池创建
  • pyqt用法
  • jquery.upload.js
  • unity3d官方教程
  • shell获取脚本进程id号
  • ruby format
  • 广东省税务局官网 国家税务总局
  • 杭州电子税务局注册流程
  • ca证书密码是什么
  • 国家税务局通用机打发票查询
  • 关于税收的问题及答案
  • 内蒙古国家税务总局电子税务局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设