Python:解码HTML文件中base64编码的字符串,并将这些字符串替换为它们的解码计数器

2024-09-26 18:08:30 发布

您现在位置:Python中文网/ 问答频道 /正文

请帮忙,因为这个翻转程序是我正在进行的噩梦!在

我有几个文件包含一些base64编码的字符串。 示例文件的一部分内容如下:

charset=utf-8;base64,I2JhY2tydW5uZXJfUV81c3R7aGVpZ2h0OjkzcHg7fWJhY2tydW5uZXJfUV81c3R7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7fQ==" 

它们的格式总是“ANYTHINGbase64,STRING” 它是html,但我将其视为一个大字符串,并在别处使用BeautifulGroup。我使用一个正则表达式'base'来提取base64字符串,然后使用base64模块按照我定义的函数“debase”对其进行解码。在

这似乎在某种程度上是可行的:b64encode的输出出于某种原因添加了不必要的东西:

后盾{高度:93px;}后援{显示:阻止!重要的是,用绳子把东西放在中间。在

我猜这意味着以字节为单位;所以我试着让我的函数将其编码为utf8,但基本上我做不到。在

我想要的最终结果是我的html中的所有“base64,STRING”都被解码并替换为DECODEDSTRING。在

请帮忙!在

^{pr2}$

Tags: 文件函数字符串程序示例内容编码string
1条回答
网友
1楼 · 发布于 2024-09-26 18:08:30

您的输入格式有点奇怪(例如,后面有一个不匹配的单引号),因此请确保您没有做不必要的工作或以奇怪的方式解析内容。在

不管怎样,假设你的输入是给定的形式,你必须像刚才那样用base64解码,然后用给定的编码解码得到一个字符串而不是bytestring:

import base64

inp = 'charset=utf-8;base64,I2JhY2tydW5uZXJfUV81c3R7aGVpZ2h0OjkzcHg7fWJhY2tydW5uZXJfUV81c3R7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7fQ=="'
head,tail = inp.split(';')
_,enc = head.split('=') # TODO: check if the beginning is "charset"
_,msg = tail.split(',') # TODO: check that the beginning is "base64"

plaintext_bytes = base64.b64decode(msg)
plaintext_str = plaintext_bytes.decode(enc)

现在两个结果是

^{pr2}$

如您所见,字节的内容已经是可读的,这是因为内容是ASCII。还要注意,我没有从字符串中删除尾随的引号:base64足够聪明,可以忽略内容中两个等式符号后面的内容。在


简而言之,字符串是python3中文本的一种抽象表示,如果您想用一个由1和0组成的流来表示文本(当您将数据从一个地方传输到另一个地方时,您需要一个特定的编码)。当你得到一个以字节为单位的字符串时,你必须知道它是如何编码的,以便对它进行解码并获得一个合适的字符串。如果字符串与ASCII兼容,那么编码就相当简单,但是一旦出现更多的通用字符,如果使用了错误的编码,代码就会中断。在

相关问题 更多 >

    热门问题