python小小白哟 发表于 2023-6-20 10:40:35

关于python中编码问题

import requests

r = requests.get('ht(和谐)tps://ssr1.scrape.center/static/img/logo.png',verify=False)
print(r.text)


抛出的错误报告:
UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 0: illegal multibyte sequence

请问大牛们如何解决这个问题呢?在线等待。

isdkz 发表于 2023-6-20 12:18:15

import requests

r = requests.get('https://ssr1.scrape.center/static/img/logo.png',verify=False)
r.encoding = 'utf-8'
print(r.text)

python小小白哟 发表于 2023-6-20 15:17:57

isdkz 发表于 2023-6-20 12:18


出现了这个错误报告:
UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 0: illegal multibyte sequence
不知道怎么回事

isdkz 发表于 2023-6-20 15:24:51

python小小白哟 发表于 2023-6-20 15:17
出现了这个错误报告:
UnicodeEncodeError: 'gbk' codec can't encode character '%ufffd' in position 0 ...

才发现你请求的是一个图片,图片不同于文本,它是一个二进制文件,是不遵循文本编码的,所以自然不能以 .text 查看

你可以把它保存成一个图片再打开
import os
import requests

r = requests.get('https://ssr1.scrape.center/static/img/logo.png',verify=False)
with open('logo.png', 'wb') as f:
    f.write(r.content)

os.startfile('logo.png')

python小小白哟 发表于 2023-6-20 15:30:30

isdkz 发表于 2023-6-20 15:24
才发现你请求的是一个图片,图片不同于文本,它是一个二进制文件,是不遵循文本编码的,所以自然不能以 . ...

你好 但是我看到的书上写的代码示例是可以打开的二进制图片的。以text类型打开的。

isdkz 发表于 2023-6-20 15:33:31

python小小白哟 发表于 2023-6-20 15:30
你好 但是我看到的书上写的代码示例是可以打开的二进制图片的。以text类型打开的。

不会吧,你是不是搞错了,你拍个照片上传到这里发给我看看:wenshushu.com

python小小白哟 发表于 2023-6-20 15:42:29

isdkz 发表于 2023-6-20 15:33
不会吧,你是不是搞错了,你拍个照片上传到这里发给我看看:wenshushu.com

打开的是一堆乱码。以text打开的。

isdkz 发表于 2023-6-20 15:46:14

python小小白哟 发表于 2023-6-20 15:42
打开的是一堆乱码。以text打开的。

直接用 .text 应该是不行的,如果你要忽略编码错误可以看下面的方法

在 Python 的requests库中,有时会遇到解码文本内容时的编码问题。如果你希望忽略这些错误,你可以尝试用以下方法:

import requests

response = requests.get('http://example.com')

# 使用 errors 参数设置为 'ignore' 来忽略解码错误
text = response.content.decode('utf-8', errors='ignore')


这段代码会尝试以 utf-8 编码来解码响应的内容。如果遇到任何错误,它将忽略这些错误,并继续处理文本。但需要注意的是,这可能会导致某些字符丢失或替换为其他字符。

如果你知道具体的文本编码,你也可以替换 'utf-8' 为你所知道的编码。例如,如果你知道文本是以 'gbk' 编码的,你可以这样写:

text = response.content.decode('gbk', errors='ignore')


如果你不确定正确的编码,你可以尝试使用 chardet 库自动检测编码:

import requests
import chardet

response = requests.get('http://example.com')

encoding = chardet.detect(response.content)['encoding']
text = response.content.decode(encoding, errors='ignore')


这段代码会使用 chardet.detect() 方法来推断响应内容的编码,然后用推断出的编码来解码文本。
页: [1]
查看完整版本: 关于python中编码问题