如何在Python3中正确转换Windows注册表SAM的十六进制编码字节为字符串
解决方法:使用对应编码格式解码
你碰到的这个字节序列其实是**UTF-16LE(小端序UTF-16)**编码的字符串,每个可见字符后面跟着的\x00空字节,正是UTF-16LE编码ASCII字符的典型特征——这类字符会用两个字节表示,高字节补0。
直接用对应编码解码就能精准得到目标字符串,完全不需要取巧操作:
b = b'A\x00d\x00m\x00i\x00n\x00i\x00s\x00t\x00r\x00a\x00t\x00o\x00r\x00' result = b.decode('utf-16le') print(result) # 输出: Administrator
为什么这个方法靠谱?
Windows注册表中的字符串普遍采用UTF-16LE编码存储,这是微软系统的标准规范。你的字节对象里,每一组[字符字节+\x00]的组合,刚好对应UTF-16LE编码下的单个ASCII字符。用utf-16le解码时,Python会自动将每两个字节解析为一个Unicode字符,完美还原原始的"Administrator"字符串。
要是你暂时拿不准编码,也可以尝试utf-16(不带le后缀),不过因为你的字节序列没有BOM(字节顺序标记),明确指定utf-16le会更稳妥,毕竟你已经观察到了小端序的特征。
内容的提问来源于stack exchange,提问作者jalu
相关产品推荐
相关产品推荐

