Python - 将二进制文件中的宽字符字符串转换为Python Unicode字符串
今天过得很漫长,我有点儿困惑。
我正在读取一个二进制文件,这个文件里面有很多宽字符字符串,我想把它们转换成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'