Python使用request.get函数,返回的网页内容为UNCOIDE编码,中文出现乱码解决方案

Python使用request.get函数,返回的网页内容为UNCOIDE编码,中文出现乱码解决方案

问题描述:

解决这个问题,首先确保你的编辑器,运行环境中,'中文’这样的字符串是能够打印出来的。(我所使用的VScode自带OUTPUT,会产生中文乱码。所以我改为直接用Terminal来运行Python。)接着,如果还疑惑request得到的内容还是中文乱码,请继续看下去!

通过request.get访问网站,网站返回的是Unicode-escape格式的字节流。
例:

r = b'{"code": 1, "proxies": [{"https": "0.0.0.0:8008",
 "\\u6700\\u540e\\u9a8c\\u8bc1\\u65f6\\u95f4": "2019-10-23 09:14:15",
 "\\u9a8c\\u8bc1\\u6b21\\u6570": 1, "\\u7c7b\\u578b": "\\u9ad8\\u533f"}]}'

如何将其变回为中文呢?

解决方法:
r.decode("unicode-escape")
解答:

'b\\u9ad8'(高)字来说:
我们从网站上通过requests.get(url).content得到的是bytes字节流对象。
->b'\\u9ad8'
b'\\u9ad8'其实是unicode-escape格式的字节流,表示的是"高"字(和常见的unicode格式'\u9ad8'是不同之处在于它用\\u来标记为unicode编码,而unicode格式用\u标记为unicode编码)。
我们用decode(“unicode-escape”)对其进行解码,它就能理解为是汉字了。

思考

我个人觉得\\\是不同的环境中的影响。可能不是上面我所说的内容。但有了更准确地理解,我会第一时间更新博客的。解决方法肯定是对的,读者尽管放心,若有指点,不胜荣幸!

补充:
1. encode函数和decode函数
  • encode作用将当前字符串按指定格式编码为bytes字节流。
  • decode作用将字节流按指定格式解码为字符串。
  • str对象是没有decode的,bytes对象才有decode

比如:

r = "中文"
print(r, type(r)) # "中文" <class 'str'>
r= r.encode("utf-8")
print(r, type(r)) # b'\xe4\xb8\xad\xe6\x96\x87'  <class 'bytes'>
r = r.decode("gb2312")
print(r, type(r)) # "中文" <class 'str'>
2. Python运行时将字符串转为Unicode格式
  • Python3中输入输出不管是什么格式,中间转接的都是Unicode格式。
    比如输入是汉字,python内部的过程是 ‘请’→'\u8bf7'→’请’

你如果在Python中print('\u8bf7'),得到的就是’请’字,可知Python能直接识别你的字符串中Unciode格式的内容。

3. 编码
  • \x是16进制,后面跟两位,表示单字节编码。
  • \u是unicode码,后面跟4个16进制数。
3. 这一问题我刚开始的想法

我们从网站得到的字符串是"\\u6700"(误),转义符\\转义了,就不能用\u来表示unicode格式了,所以只能识别为一个普通的字符串(实际上这是unicode-escape格式)。你对其encode("utf-8")得到的是b'\\u6700'

  • '\u8bf7'(python直接识别为’请’) -> 经过encode('utf-8')后 -> b'\xe8\xaf\xb7'(此过程将unicode格式的字符串转为utf-8格式的字节流)
  • '\\u8bf7' -> 经过encode('utf-8')后 -> b'\\u8bf7'(此过程将一个普通的字符串同样转为utf-8格式的字节流)

参考
https://www.kawabangga.com/posts/2767

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值