做爬虫可能经常遇到爬取到的数据存在编码问题,简直让人头疼,比如爬取到的是这样的:

例如:
\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c
中文是: 你好世界

上面这个是utf-8编码,但数据类型是字符串类型,而不是bytes类型的utf-8编码。

这样会导致一个结果:如果直接输出,显示的是乱码,也不能使用decode进行utf-8解码得到中文。

在python2中,中文指定utf-8格式,字符串存入内存就是utf-8编码格式,直接输出就是中文,就不存在这个问题;

而python3中,字符串存入内存是以unicode编码格式存入的,输出的是默认的utf-8编码格式,所以得到的是乱码。

可能有人会说,既然得到的是utf-8编码,在前面加上 " b " ,字符串就是bytes类型了,再利用decode进行解码不就可以得到中文吗?但显然,这是行不通的,你不可能去手动一个个添加,那有没有其他方法呢?

答案肯定是有的,既然知道这个字符串是utf-8编码的,那么我换种方式,只要将字符串中的 " \x " 改为 " % " 利用urllib中的unquote方法解码就可以得到中文了,因为url中的中文utf-8编码和这里的区别就是url中编码是%开头。

那么其实只要对utf-8字符串反向转换就行,先将字符串编码指定为unicode_escape

s = '\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
s = s.encode('unicode_escape')

得到bytes类型数据(单斜杠变成双斜杠)

b'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xe4\\xb8\\x96\\xe7\\x95\\x8c'

接着再对bytes类型进行utf-8解码,得到字符串,将字符串中的 " \x " 替换为 " % "

ss = s.decode('utf-8').replace('\\x', '%')

替换作用就是将字符串改为url的utf-8编码格式

%e4%bd%a0%e5%a5%bd%e4%b8%96%e7%95%8c

最后利用urllib中的unquote方法将url编码解码,得到中文

un = parse.unquote(ss)

关于\x开头的字符串编码转换中文解决方法相关推荐

  1. 分享万能java字符串编码转换工具类

    代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima ...

  2. java万能编码转换_分享万能java字符串编码转换工具类

    package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public cla ...

  3. 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...

  4. chrome字符串编码转换

    chrome字符串编码转换 字符串编码转换涉及宽字节表示法与UTF-8表示法之间的转换.宽字节表示法与UTF-16表示法之间的转换.UTF-8表示法与UTF-16表示法之间的转换.UTF-16表示法于 ...

  5. JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解...

    转:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html //该方法不会对 ASCII 字母和数字进行编码,也不会对 ...

  6. js符号转码_JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解...

    转:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html //该方法不会对 ASCII 字母和数字进行编码,也不会对 ...

  7. java 判断是否中文字符_java中判断字符串是否是中文的方法

    java中判断字符串是否是中文的方法 发布时间:2020-06-25 14:07:38 来源:亿速云 阅读:79 作者:Leah 本篇文章为大家展示了java判断字符串是否为中文的方法,代码简明扼要并 ...

  8. JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解

    JS 字符串编码函数(解决URL特殊字符传递问题):escape().encodeURI().encodeURIComponent()区别详解 参考文章: (1)JS 字符串编码函数(解决URL特殊字 ...

  9. MYSQL无法识别中文解决方法“一劳永逸”

    MYSQL 无法识别中文解决方法 "一劳永逸" 多数情况下,mysql在刚刚安装时是不支持中文的,这是由于编码的问题 我们可以通过修改配置文件,永久实现mysql对中文的识别 首先 ...

最新文章

  1. java 匿名类调用方法_java – 从匿名类调用新定义的方法
  2. System.Web.Optimization找不到引用
  3. redis源码客户端和服务端通信过程
  4. 鸿蒙系统电视k歌,华为电视怎么k歌?看完两分钟快速开启K歌模式
  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布...
  6. debugging Auto Layout:Logical Errors
  7. 面试官系统精讲Java源码及大厂真题 - 40 打动面试官:线程池流程编排中的运用实战
  8. 如何使div的浏览器窗口高度为100%
  9. 【CODEVS1191】数轴染色
  10. 算法导论第三版 第4章习题答案
  11. 打散线条lisp_《湘源修建性详细规划CAD系统》用户使用手册.doc
  12. 球面坐标系与三角函数 Spherical Coordinates and Trigonometric Functions
  13. matlab行星运动轨迹仿真动画,Matlab动画模拟太阳系行星运动
  14. xinput1_3.dll丢失怎么修复win10_有什么好的修复方法推荐?
  15. iOS开发 设置状态栏字体颜色
  16. Android 10 11 删除本地照片方法
  17. 常量的定义与使用与变量的定义与使用
  18. Linux字体关联到wine中,Wine的中文显示与字体设置
  19. chrome插件 自动点击页面元素 自动填入内容
  20. 何小鹏:跟李斌赌输了 将付一辆ES8顶配的购车款给对方

热门文章

  1. 倍福--编码器链接到虚轴,虚轴不做控制,实轴做从轴,实现电子凸轮或电子齿轮的耦合
  2. python中shelf_Python cmds.shelfLayout方法代码示例
  3. 铁威马F2-NAS2评测(家用云存储NAS)
  4. 内核查找符号指针函数kallsyms_lookup_name
  5. stm32跑web服务器和协议栈的区别,STM32与LAN9252构建EtherCAT从站(二):使用SSC生成协议栈和XML文件——丁丁的个人网站...
  6. springboot整合微信支付
  7. rss订阅 android,是的!我用这些软件订阅 RSS
  8. app系统服务器出错怎么回事,app连接服务器出错
  9. Linux中卷的扩展命令
  10. commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(三)-中英对照文档及源码赏析