python编码程序_python 编码

网页的编码方式是简体中文gb2312 (查看网页源码,可以看到),而python内部的编码方式为unicode,之前的代码是这样的:

contentAll = urllib.urlopen(urlLink).read()

soup = BeautifulSoup.BeautifulSoup(contentAll)  #生成BeautifulSoup对象

经过url定位得到html的document对象之后,此时的编码方式为网页文本的编码方式gb2312,

因此在将contentAll送进去生成BeautifulSoup对象之前必须对其进行解码(decode)为unicode,使用的code为gb2312,修改后的代码如下所示:

contentAll = urllib.urlopen(urlLink).read()

soup = BeautifulSoup.BeautifulSoup(contentAll.decode('gb2312','ignore'))  #生成BeautifulSoup对象

解码的时候加上ignore参数是因为解码过程中有一部分貌似不能正常解码,加上该参数之后能跳过该部分。

1 源文件编码

在文件头部使用coding声明。告诉python解释器该代码文件所使用的字符集。

#/usr/bin/python

#coding: utf8

2 内部编码

代码文件中的字符串,经过decode以后,被转换为统一的unicode格式的内部数据,类似于u''*''。unicode数据可以使用encode函数,再自由转换为其他格式的数据,相当于一个统一的平台。

直接输入unicode数据

>>> u''你好''

u''/u4f60/u597d''

将unicode数据转换为gb2312格式

>>> u''你好''.encode(''gb2312'')

''/xc4/xe3/xba/xc3''

将输入的gb2312格式的数据解码为unicode

>>> ''你好''.decode(''gb2312'')

u''/u4f60/u597d''

输入数据的格式取决于所用shell终端的编码设置,本例中为zh_CN

[root@chenzheng python]# echo $LANG

zh_CN

解码同时转换为utf8

>>> ''你好''.decode(''gb2312'').encode(''utf8'')

''/xe4/xbd/xa0/xe5/xa5/xbd''

3 外部输入的编码

其实这个和在python交互shell中输入的字符串,所遇到的情况基本一样。但程序中常常用到从网络,文件读取的数据,故此单独列出,需要特别注意其编码格式是否于系统要求相符。

由于xml.etree.EelementTree.parse()不识别gb2312编码,在解析的时候,需要将其转换utf8格式才可以,可以使用下面的函数

def read_page(url):

"""读取gb2312编码的xml文件,转换为utf8格式"""

import urllib

udata = urllib.urlopen(url).read().decode(''gb2312'')

u8data = udata.encode(''utf8'')

return u8data.replace(''gb2312'', ''utf-8'') #简单替换xml文件第一行的encoding属性值

另外,可以使用一个小函数来判断数据的编码格式:

def encoding(s):     cl = [''utf8'', ''gb2312'']     for a in cl:         try:             s.decode(a)             return a         except UnicodeEncodeError:             pass     return ''unknown''

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

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

相关文章

比特(bit)_二进制数

二进制数位,也叫比特位,其实就是指位置,是指二进制数的位置。例如,0101 这是二进制数,而且是 4 位的二进制数,因为有 4 个位置,每个位置放一个二进制数,确切的说是每个位置放一个二进…

javax线程池超时结束_没有Javax的Jakarta EE:这次世界也不会结束

javax线程池超时结束如果您错过了新闻, Oracle将向Eclipse基金会捐赠Java EE规范 。 这个决定是在规范过程中进行了相当长时间的Hibernate之后,人们理所当然地怀疑Oracle丧失了对Java EE的战略兴趣。 首先,Java EE和更广泛的Java社区很好地满…

Final Cut Pro X如何去视频水印/视频去水印

先剪辑好视频(比如把不要的段切掉),然后选中视频,把它复制一份到另一个轨道(按住option键,用鼠标左键拖放即可复制)点击右下角的 效果(Effect)→ 模糊(Blur)→ 高斯模糊(Gaussian),把高斯模糊拖入上边那条轨道再次选择效果(Effect…

为什么线程池里的方法会执行两次_面试官问你java都有哪些线程池,自己是否自定义过线程池...

我还记得大学实习面试时,被问到什么是线程池这个问题,因为这个题我被录取了,原因就是我背出来了,而另外一个面试的没背出来,说实话当时还真不知道它是干什么的,就是看面试题给背下来了,在之后就…

java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务

java中两任务并行运行当我们用Java编写多线程应用程序时,我们倾向于使用“ Runnable ”接口来实现线程类。 您的类必须简单地实现此接口并覆盖run方法。 对于琐碎的用例,我们可以通过调用“ start”方法直接启动线程,结果将控制流委托给run…

Servlet中的监听器

文章目录什么是监听器如何写监听器配置监听器统计在线人数的案例什么是监听器 Servlet 规范当中定义的一种特殊的类,作用是监听容器当中产生的一些事件并进行相应的处理。 容器产生的事件指的是两大类事件: 第一大类 生命周期相关的事件,指…

python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法:首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下:创建后会获得如下信息:APP_ID ******API_KEY …

selenium 替代品_每个人都在谈论Selenium替代品-明智地选择!

selenium 替代品什么是Selenium? Selenium是一套Web浏览器自动化工具,用于跨多种平台实现浏览器自动化。 尽管Selenium工具具有更多功能,但出于测试原因,它们仍被用来自动化Web应用程序。 Jason Huggins于2004年创建了Selenium&am…

Maven构建Artifact时,不会创建空目录

Maven 构建的 Web 项目中,你在 Web Resource Directories(默认名称是webapp)下创建的空目录,在构建Artifact 时,并不会在构件中也创建该空目录。 下图所示的四个空目录 upload,在构建 Artifact 时都不会创…

通用数据保护条例_欧盟《通用数据保护条例》——2019年的形势

“自欧盟《通用数据保护条例》(GDPR)生效以来,很多公司企业都忙于实行全新的数据保护标准。一个完善的数据保护管理系统比以往任何时候都要重要。我们可以参考一下其他公司在GDPR方面的一些初步经验。”自2018年5月25日GDPR生效以来,它在某些情况下引发了…

【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置

caffeine 缓存缓存是几乎所有应用程序性能的关键。 有时需要分布式缓存 ,但并非总是如此。 在许多情况下,本地缓存可以很好地工作,并且不需要分布式缓存的开销和复杂性。 因此,在许多应用程序中,包括普通的Spring和Sp…

File类的学习

文章目录简介常量常用方法代码示例简介 java.io.File 是文件和目录的路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作 常量 public static final char separatorChar // 这个常量保存系统默认的文件名分隔符,以字符形式保存 public…

服务器被一堆系统登录_WIN10做天高服务器客户端登录出现“操作系统原因无法登录”...

今天上午,有一个天联高级版的客户反馈,说金万维天联高级版客户端无法登录了,如图:具体错误“由于您连服务器操作系统原因”,具体截图如下:根据上图的错误提示,应该是天联高级版服务器的补丁失效…

selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素

selenium查找文本Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点。 在Selenium中充分使用CSS定位器可以帮助您以更高效,更彻底的方式执行测试。 我从7年以来一直从事自动化测试行业,而且…

Servlet文件上传/上传文件功能的实现(commons-fileupload)

文章目录正常步骤使用 commons-fileupload.jar 实现文件上传正常步骤 step1 在 form 中,设置 method"post",设置 enctype"multipart/form-data"。enctype 属性用于设置表单的编码方式,对于文件上传,必须设置成"mul…

python单行箭头_在Python中,如何让箭头尖在指定的坐标处开始/结束?

我试图使用matplotlib的注释绘制两端带有箭头的直线。但当我绘制它们时,箭头的尖端并没有在图中所示的指定坐标处开始或结束。提示应该从0.6和0.8开始和结束,但它们不是。在可复制代码import matplotlib.pyplot as pltfig plt.figure(figsize (5, 5))p…

MySQL 8.x 修改root用户密码/修改密码/重置密码/忘记密码(为了避免掉坑,值得收藏)

操作系统:CentOS Linux release 8.2.2004 (Core) MySQL版本:mysql Ver 8.0.26 for Linux on x86_64 (Source distribution) 忘记 root 用户的密码,然后我以无需“权限验证”的方式启动 MySQL 服务器(具体方法参考这里&#xff09…

sql 账号查询一个表勾选那个权限_Spring Cloud微服务架构中的数据权限DataPermision实现方案...

Spring Cloud微服务架构中的数据权限DataPermision实现方案一、出现原因在Spring Cloud的微服务架构中,常见的权限控制除了菜单权限外,还有数据权限DataPermision。菜单权限主要用于控制用户角色所能访问的菜单以及页面按钮的显示与否,而数据…

科学计数法详解

1.4013E-45 1.4013 * 10 的 -45 次方 1.4013 * 10 的 45 次方的倒数 1.4013 * 10 的 45 次方分之一 1.4013 * 1/10 的 45 次方。 算术表达式:1.4013E-45 1.4013 * 10−4510^{-45}10−45 1.4013 * 11045\frac{1}{10^{45}}10451​ 1.4013 * (110)45(\frac{1}{…