python 中文编码差异_Python 编码为什么那么蛋疼?

平常还觉得编码问题一般能水过去,到爬虫这真是"不信抬头看,苍天饶过谁"...

其实,Python2和Python3中对于编码已经发生了很大的改变(但其实是更方便了),我们一个个来讨论:

Python2

1.在Python2中默认编码为ASCII码

2.两种字符序列类型:str(以默认的ASCII码编码,可视为数据传输时的bytes数据类型),Unicode类型

3.两种类型的转化方式为:

Python3

1.在Python3中默认编码为Unicode

2.两种字符类型:str(以默认的Unicode编码),bytes数据类型

3.两种类型的转化方式为:

综上,我们已经了解完了Python2和Python3之间的编码差异

下面来介绍编码的影响,以Python3为例(Python2中就把str当做Python3中的bytes吧)

#-*- coding:utf-8 -*-

from urllib import request

with request.urlopen('http://www.baidu.com') as url:

bytes_web_data=url.read() #使用url对象的read()方法可以读取到网页的源代码

#由于无论是XML还是json,数据传输的类型都是以bytes数据类型进行传输

print('bytes数据类型下,网页源代码为:',bytes_web_data) #打印结果前有b''修饰,表示为bytes数据类型,不能显示中文字符

str_web_data=bytes_web_data=bytes_web_data.decode('utf-8') #将bytes按utf-8解码为str(Unicode编码),能显示中文字符

print('str数据类型下,网页源代码为:',str_web_data) #打印结果可显示中文字符了

with open('baidu.html','w',encoding='utf-8') as file: #以写的方式打开文件

file.write(str_web_data) #写文件,使用write函数只接受str(Unicode)

上述代码是可以顺利运行的,且运行结果会生成一个baidu.html文件,点击进入百度首页

其实,从注释中能提取出3个很重要的点:

1.不论是json还是XML,数据在传输时都是以bytes数据类型进行传输的。因此,从网页上read()到的东西也是bytes数据类型的

2.写文件只接受Unicode编码的,在Python3中即str。若将bytes作为参数,即file.write(bytes_web_data),则会报错:

3.windows在存储文件时会把其保存为系统的默认编码,由于Windows7下默认编码为GBK,所以如果我在open('baidu.html','w')中不加上encode='utf-8'则可能会出现下列错误:

就是因为操作系统默认编码的问题,会保存为GBK编码,所以有些utf-8下的编码无法解释,报错。

Ps,查找系统编码的方式,打开cmd,在命令行模式下输入chcp,输出结果为 活动代码页:936 ,则表明为GBK编码,剩余编码的对应方式为:

如果你有耐心看到这里的话,差不多已经知道在url上和写文件上的编码的基本知识了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据库连接_mysql数据库连接池配置教程

在与数据库进行连接的时候,会牵扯到数据库连接池的配置,本文将详细介绍mysql数据库连接池配置,需要了解跟多的朋友可以参考下第一步:写javabeanpackage withouttears.jdbc.db;import java.util.HashMap;import java.sql.*;//JNDI有两个核心接口Context和…

2006年4月全国计算机等级考试二级Java语言程序设计

(考试时间90分钟,满分100分) 一、选择题((1)~(35)每小题2分,共70分) 下列各题A)、B)、C)、D)四个选项中&am…

asp.net web api中的版本管理

应用是演进的,通常我们用版本号来管理。api也是演进的,这篇博文就说说asp.net web api演进时的版本管理。asp.net web api的版本管理是通过微软的一个包来实现的。Install-Package Microsoft.AspNetCore.Mvc.Versioning通过url参数: api/order/api-versi…

初二物理模型有哪些_初二是成绩下滑的高危期,做好这5点成绩涨涨涨!(附全学科提升技巧,家长转给孩子!)...

原标题:初二是成绩下滑的高危期,做好这5点成绩涨涨涨!(附全学科提升技巧,家长转给孩子!)又到了每周五【学习经验分享】的时候了。今天小于老师分享的是初二关键时期可能会出现的问题,以及全科提升技巧。我们…

14个你可能不知道的JavaScript调试技巧

以更快的速度和更高的效率来调试JavaScript 熟悉工具可以让工具在工作中发挥出更大的作用。尽管江湖传言 JavaScript 很难调试,但如果你掌握了几个技巧,就能用很少的时间来解决错误和bug。 文中已经列出了14个你可能不知道的调试技巧,但是可…

mysql校对规则_MYSQL校对规则

一、前言有时候遇到这种情况,你用一个like语句查询,查到的结果中有一些并没有包含你查询的关键词的纪录;有时候遇到这种情况,你的数据库自作聪明的大小写不敏感,让你在更新时把大小写不同的两条记录都更新了&#xff1…

基于NHibernate的留言本

留言本环境:access2003 vs2005 整个留言本的类视图: 1.新建一个空的解决方案 NHibernateMessage 依次建立项目Model,DAL,BLL,Command四个项目 2.Model项目处理 删除自动生成的class1.cs文件,新建message.cs文件其代码如下 Codeusing System;…

腾讯招.NET要求以下几点,你准备好了吗?

今天是大年初七,上班第一天,你在关注什么?2021年跳槽季可能是近10年来最火爆的跳槽季,各HR都在摩拳擦掌,新的征程已开始,.NET开发者们,也该行动起来了!上图是腾讯的.NET Core招聘标准…

python设置字符间距_python字符串处理以及字符串格式化

一、python字符串处理目录:1.算长度(len),某个元素出现的次数(count)2.切片 [ ],repr:把不可见字符显示出来3.查找 #find,rfind从右边查找4.字符串和列表之间的转换(split,join list)5.替换字符串replace #替换会生成新的字符串,原来的字符串不变6.类型转换7.编…

不得了,日本出版社竟是这样吸引死宅学编程的

此前日本出版社“翔泳社”推出 IT 专业用语拟人化的 IT 说明书,将书中相关名词用萌妹子来表现,并对其性格等方面进行了设定。 比如 HTTP 酱由于在互联网上应用最为广泛,经常与大家见面,因此被设计成了偶像。她与其它协议有着很好的…

mysql表空间权限_MySQL InnoDB表空间加密示例详解

前言从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 。此功能为物理表空间数据文件提供静态加密。该加密是在引擎内部数据页级别的加密手段,在数据页写入文件系统时加密,加密用的是AES算法,而其解密是在从…

Dapr 正式发布 1.0

年前我写了一篇博客《Dapr 已在塔架就位 将发射新一代微服务》, 今天Dapr 正式发布了1.0 :Dapr Runtime v1.0.0Dapr dotnet SDK v1.0.0随着Dapr 发布1.0 版本, .NET团队编写的《Dapr for .NET Developers》:https://github.com/do…

帮助别人是一种快乐!

帮助人是一种快乐!忽然之间想起的这种话题。其实,还是缘于最近看的一篇商界人物的文章《杨卓舒》其实,这些字眼一直都在我们的眼帘前晃荡,更多的人只是顿悟而已,也许还有人帮助过一次,获得了一次短暂的快乐…

python中x 1什么意思_Python:A [1:]中x的含义是什么?

这是array slice语法.看到这个问题:Explain Python’s slice notation对于列表my_list对象,例如[1,2,“foo”,“bar”],my_list [1:]相当于从0索引1开始的所有元素的浅复制列表:[2,“foo”,“bar”].所以你的for语句遍历这些对象:…

100 万在中国不同地方能活多久?

最近,一张名为 “100 万在中国各省能生活多久?” 的图片在网上流传 话不多说,往下看 没错,就是正如你们看到的 天朝大北京 以“100万能活19年9个月”的 成绩排名“倒数第一” 图片一出 数据君虎口一震 顿时一声惊叫 统计按“年人均…

JAVA跟MYSQL数据库交互_【编写Java程序实现与Mysql数据库的连接,并交互性的实现简单查询,删除,修改,排序,显示等操作】...

目前博主只实现了查询和插入,而且还不太会在面板对数据库语句进行更新,写完再看感觉语言有些冗杂,往后再更,大半夜写这个也是醉了呢。import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListe…

重磅:.NET 6 发布首个预览版

前言2021 年 2 月 17 日微软发布了 .NET 6 的 Preview 1 版本,那么来看看都有什么新特性和改进吧,由于内容太多了因此只介绍一些较为重点的项目。ASP.NET Core 6 Preview 1 和 EF Core 6 Preview 1 同样有很多的更新内容,但是限于篇幅就不在这…

热键与快捷键

热键及快捷键(GtkAccelGroup) 热键:一般是字母带下划线.在当前控件内(如打开的菜单)可以用alt字母来代替点击的功能快捷键:一般指,在本窗口任何位置内,按某组合键,都可以代替点击的功能.:) 如果你的理解与我的有冲突,请以我的理解为准!试举例证:#include #include const char *…

python服务器qt客户端_python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例...

本文在上文的基础上重新实现支持多线程的服务器。以下为TCP客户端的程序代码:#!/usr/bin/env python3import sysfrom PyQt5.QtCore import (QByteArray, QDataStream, QDate, QIODevice,QRegExp, Qt)from PyQt5.QtWidgets import (QApplication, QDateEdit, QFrame,…

巧合?模仿还是抄袭?水木年华的《秋日恋歌》和Lube 乐队的《Pozovi Menya Tiho Po Imeni》...

今天听到了俄罗斯的Lube 乐队的《Pozovi Menya Tiho Po Imeni》,前奏感觉很好熟悉,继续听,有种似曾相识的感觉,曲风和演唱风格都很熟悉,我极力的回忆,依稀想起水木年华有一首《莫斯科的黄昏》的演唱风格是在…