UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 中的字节0xeb:无效的延续字节

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xeb in position 0: invalid continuation byte

提问人:osama 提问时间:9/26/2023 最后编辑:osama 更新时间:9/27/2023 访问量:225

问:

我正在尝试在 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)

这里出了什么问题?

python utf-8 base64 解码

评论

0赞 Codist 9/26/2023
encoded_string显然是某物的 Base64 表示。不管它是什么,它都不是 UTF-8。事实上,97 种众所周知的编码中没有一个能产生你所期望的输出
0赞 osama 9/26/2023
@DarkKnight我已经尝试了多种解码选项,包括 Latin-1,但它们都只是给出随机无效的输出。我仍然想知道为什么只有 ChatGPT 能够解码它,它没有给我任何正确的线索。
1赞 Codist 9/27/2023
ChatGPT 显然在某处找到了一种资源,该资源(错误地)指出 Base 64 字符串代表该 HTML 片段,而 ChatGPT 认为这是事实,而事实上并非如此。ChatGPT 并不总是把事情做对
0赞 osama 9/27/2023
@DarkKnight ChatGPT 给出的答案是合法和正确的,因为我已经从我获得这个编码字符串的网站对其进行了测试。我还要求他解码另一个类似的字符串(55PGlmcmFtZSB0aXRsZT0idm8gdmVsb....),它也给了我正确的解码:<a href=“vo video player” src=“voe.sx/e/thwqzajyih7i7” id=“player” allowtransparency=“true” scrolling=“no” transparent=“yes” frameborder=“0” allowfullscreen></iframe>。所以,显然他知道如何解码,但不知道怎么解码!
0赞 jeremie bergeron 9/27/2023
你从哪里得到你的base64?它可以帮助我们

答:

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。所以是的,这应该关闭