一个 py3 的坑,自己想了几天结果。获取的网页字符串是\xb6\xd4\xb6\xcc\xd0\xc5\格式的, py3 没有 str.decode()

2018-10-05 21:51:53 +08:00
 lsj8924

如图,我爬虫获取到的是一个 dict。现在我要把字典的中文解析出来。我用 py2 是这么干的: 主要是用了字符串的 decode。但是 py3 没有这个方法啊。 而且这个 dict 是用 requests 获取出来的 response.headers 获取出来就是字符串 dict,不能是 bytes。我自己试了用 bytes(s,"gbk"),str(s,"gbk")都没用。自己也想了几天,没啥结果。别跟我说在字符串前面加个 b 变为 bytes,问题是变量不能加 b 啊。

3774 次点击
所在节点    Python
13 条回复
jianzhao123
2018-10-05 21:54:07 +08:00
哈哈哈,我前段时间也遇到了,放弃了后来……
leoleoasd
2018-10-05 21:57:21 +08:00
eval("ans = b'{}'".format(str))
lhx2008
2018-10-05 21:58:08 +08:00
data.encode("raw_unicode_escape")
XIVN1987
2018-10-05 21:59:53 +08:00
先 encode 再 decode 即可:

In [3]: s.encode('latin')
Out[3]: b'\xb6\xd4\xb6\xcc\xd0\xc5'

In [4]: s.encode('latin').decode('gbk')
Out[4]: '对短信'
lhx2008
2018-10-05 22:00:34 +08:00
"\xd3\xf1\xc1\xfa".encode("raw_unicode_escape").decode("gbk")
Out[5]: '玉龙'
fhefh
2018-10-05 22:07:01 +08:00
![]( )


先检查 text 是什么类型如果 type(text) is bytes,那么 text.decode('unicode_escape')

如果 type(text) is str,那么 text.encode('latin-1').decode('unicode_escape')

链接: https://www.zhihu.com/question/26921730/answer/49625649
fhefh
2018-10-05 22:13:16 +08:00
sobigfish
2018-10-05 22:37:31 +08:00
呃,我不是很懂 python
更像是 lz 那个是 dict 不知道怎么转 str 的问题

搜一下还是能找到解决方案。 没测试过中文文件名 lz 自己测试一下
r = requests.get('http://httpbin.org/image/jpeg')
headers = str.encode(json.dumps(dict(r.headers)))
print(headers.decode('gbk'))
lsj8924
2018-10-05 22:43:13 +08:00
@fhefh @lhx2008 @XIVN1987 @leoleoasd 感谢各位大佬为我解惑。
ClutchBear
2018-10-06 08:25:37 +08:00
既然是爬虫,
response = requests.get(url)
response.encoding="utf-8"
就直接是能看懂的汉字了,
那用这么麻烦...
vipfts
2018-10-06 10:20:43 +08:00
print(str(b'\xb6\xd4\xb6\xcc\xd0\xc5', encoding="GBK"))
v2014
2018-10-07 09:25:29 +08:00
自己实现 http.client.parse_headers 方法

https://www.dust8.com/2017/12/04/header-parsing-error/
evilhexxx
2018-10-07 12:01:22 +08:00
网络编程中常见的编码问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/495092

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX