提问人:osama 提问时间:9/26/2023 最后编辑:osama 更新时间:9/27/2023 访问量:225
UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 中的字节0xeb:无效的延续字节
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xeb in position 0: invalid continuation byte
问:
我正在尝试在 Python 中解码以下字符串:
61PGlmcmFtZSB0aXRsZT0ib2sgdmlkZW8gcGxheWVyIiBzcmM9Ii8vb2sucnUvdmlkZW9lbWJlZC82MzI5MjYyOTM0NjkwP2F1dG9wbGF5PTEiIGlkPSJwbGFjZWhvbGRlciIgYWxsb3d0cmFuc3BhcmVuY3k9InRydWUiIHNjcm9sbGJhcnM9Im5vIiB0cmFuc3BhcmVudD0ieWVzIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3c9ImVuY3J5cHRlZC1tZWRpYSAqOyBhdXRvcGxheTsgZnVsbHNjcmVlbiIgd2lkdGg9IjEwMCUiIGhlaWdodD0iNDgwIiBzY3JvbGxpbmc9Ik5vIiAgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==
但是,我收到“utf-8”错误(其他编码选项给出无效的输出):
Text\decode test.py", line 7, in <module>
decoded_string = decoded_bytes.decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xeb in position 0: invalid continuation byte
正确的解码字符串应如下所示:
<a iframe title="ok video player" src="//ok.ru/videoembed/6329262934690?autoplay=1" id="player" allowfullscreen="true" fullscreen="" width="100%" height="480" scrolling="no" allow="encrypted-media" frameborder="0" allowfullscreen></iframe>
我也尝试了多种在线解码工具,但没有得到任何正确答案。 只有 ChatGPT 能够给我正确的解码字符串;但是,当我要求该过程时,我也不断获得我正在使用的相同 python 代码:
import base64
encoded_string = "61PGlmcmFtZSB0aXRsZT0ib2sgdmlkZW8gcGxheWVyIiBzcmM9Ii8vb2sucnUvdmlkZW9lbWJlZC82MzI5MjYyOTM0NjkwP2F1dG9wbGF5PTEiIGlkPSJwbGFjZWhvbGRlciIgYWxsb3d0cmFuc3BhcmVuY3k9InRydWUiIHNjcm9sbGJhcnM9Im5vIiB0cmFuc3BhcmVudD0ieWVzIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3c9ImVuY3J5cHRlZC1tZWRpYSAqOyBhdXRvcGxheTsgZnVsbHNjcmVlbiIgd2lkdGg9IjEwMCUiIGhlaWdodD0iNDgwIiBzY3JvbGxpbmc9Ik5vIiAgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg=="
decoded_bytes = base64.b64decode(encoded_string)
decoded_string = decoded_bytes.decode("utf-8")
print(decoded_string)
这里出了什么问题?
答:
0赞
jeremie bergeron
9/27/2023
#1
在您共享的网站上,有一种称为 .
要解码 base64,它执行以下操作:setVideo
window.atob(track.toString().substring(2));
在 python 中,这里是等价的
import base64
encoded_string = "61PGlmcmFtZSB0aXRsZT0ib2sgdmlkZW8gcGxheWVyIiBzcmM9Ii8vb2sucnUvdmlkZW9lbWJlZC82MzI5MjYyOTM0NjkwP2F1dG9wbGF5PTEiIGlkPSJwbGFjZWhvbGRlciIgYWxsb3d0cmFuc3BhcmVuY3k9InRydWUiIHNjcm9sbGJhcnM9Im5vIiB0cmFuc3BhcmVudD0ieWVzIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3c9ImVuY3J5cHRlZC1tZWRpYSAqOyBhdXRvcGxheTsgZnVsbHNjcmVlbiIgd2lkdGg9IjEwMCUiIGhlaWdodD0iNDgwIiBzY3JvbGxpbmc9Ik5vIiAgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg=="
decoded_track = base64.b64decode(encoded_string[2:]).decode('utf-8')
print(decoded_track)
评论
1赞
tripleee
9/27/2023
换句话说,如果您从问题中提供的 base64 数据的开头剥离,您的代码就可以正常工作。我们无法从问题的文本中猜到这一点,所以我投票决定以不可重复的方式结束这个问题。61
0赞
Codist
9/27/2023
@tripleee 此外,显示为“base64”的字符串不是有效的 base64。所以是的,这应该关闭
评论