【发布时间】:2015-03-26 17:31:57
【问题描述】:
我在 Python 3 中解码 ASP.NET 视图状态字符串时遇到问题。
当我尝试使用 bash 的 base64 命令解码字符串时,它成功解码了字符串并且我能够看到我需要的所有信息(其中大部分是希伯来语,意思是 UTF-8)。视图状态当然只是 base64 编码而不是加密。
但是,当我尝试使用 Python 的 base64 库对字符串进行解码,然后将字节数组解码为 UTF-8 字符串时,我收到一条错误消息:
UnicodeDecodeError: 'utf-8' 编解码器无法在位置解码字节 0xff 0:无效的起始字节
我应该提到,由于字符串是视图状态,前几个字节是二进制数据,“0xff”是有意义的,但是在这些字节之后数据是可读的。
Python 3 代码段:
b = "The_ViewState"
print(base64.b64decode(b).decode("utf-8"))
为什么解码在 bash 中有效,而在 Python 中无效?如何解决?
【问题讨论】:
-
可能 Bash 忽略了它无法解码的字节,这在无效输入可能是错误的编程环境中不是一个好的选择。为什么不跳过前几个字节?
-
但是,您没有分享您的 Bash 代码,也没有分享任何示例视图状态字符串。
-
此外,视图状态包含一个完整的对象图,您需要实际解析这些二进制位以获取感兴趣的数据。
-
简而言之,您需要为 Microsoft LOS 格式编写解析器;这不一定是微不足道的!起点见msdn.microsoft.com/en-us/library/…;二进制值可能是object type identifiers。
标签: python utf-8 base64 viewstate