Python - 将二进制文件中的宽字符字符串转换为Python Unicode字符串

5 投票
4 回答
13266 浏览
提问于 2025-04-15 22:12

今天过得很漫长,我有点儿困惑。

我正在读取一个二进制文件,这个文件里面有很多宽字符字符串,我想把它们转换成Python的unicode字符串。(我用struct模块来处理非字符串的数据,但我不知道怎么处理字符串。)

举个例子,读取单词“Series”:

myfile = open("test.lei", "rb")
myfile.seek(44)
data = myfile.read(12)

# data is now 'S\x00e\x00r\x00i\x00e\x00s\x00'

我该如何把这些原始的宽字符数据编码成Python字符串呢?

补充说明:我使用的是Python 2.6

4 个回答

2

如果我们知道这个字符串里没有超过FF的字符,那么还有一种方法可以生成一个字符串,而不是一个unicode对象,这种方法是通过省略零字节来实现的:

>>> 'S\x00e\x00r\x00i\x00e\x00s\x00'[::2]
'Series'
3

我还建议在解码后使用 rstrip'\x00',这样可以去掉所有结尾的 '\x00' 字符,当然,如果这些字符不需要的话就可以不去掉。

>>> data = 'S\x00o\x00m\x00e\x00\x20\x00D\x00a\x00t\x00a\x00\x00\x00\x00\x00'
>>> print '"%s"' % data.decode('utf-16').rstrip('\x00')
>>> "Some Data"

如果不使用 rstrip('\x00'),结果就会有多余的空格在后面:

>>> "Some Data  "
8

这段代码是用来处理某些数据的。它可能涉及到一些循环、条件判断或者函数调用。具体来说,它的目的是为了让程序能够根据不同的输入做出相应的反应。

在编程中,我们常常需要根据条件来决定下一步该做什么,比如如果某个值大于另一个值,就执行某个操作;如果不满足这个条件,就执行另一个操作。这种逻辑在代码中是非常常见的。

此外,代码中可能还会有一些变量,这些变量就像是存储信息的盒子,我们可以在程序运行时随时查看和修改它们的内容。

总之,这段代码的核心就是通过一些简单的规则和逻辑来处理数据,让程序能够智能地做出决策。

>>> data = 'S\x00e\x00r\x00i\x00e\x00s\x00'
>>> data.decode('utf-16')
u'Series'

撰写回答