5

这是漫长的一天,我有点难过。

我正在阅读一个包含大量宽字符字符串的二进制文件,我想将它们作为 Python unicode 字符串转储。(要解压非字符串数据,我使用的是 struct 模块,但我不知道如何对字符串做同样的事情。)

例如,阅读“系列”这个词:

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

4 回答 4

8
>>> data = 'S\x00e\x00r\x00i\x00e\x00s\x00'
>>> data.decode('utf-16')
u'Series'
于 2010-04-30T17:31:30.970 回答
3

我还建议使用rstripwith '\x00'after decode - 删除所有'\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  "
于 2013-11-14T17:57:05.160 回答
2

如果已知所讨论的字符串不包含任何超出 FF 的字符,则通过省略零字节生成字符串而不是 unicode 对象的另一种可能性:

>>> 'S\x00e\x00r\x00i\x00e\x00s\x00'[::2]
'Series'
于 2011-05-27T18:01:12.400 回答
0

嗯,为什么说“打开”优于“归档”?我在参考资料(python 2.5)中看到:

3.9 文件对象 文件对象是使用 C 的 stdio 包实现的,可以使用第 2.1 节“内置函数”中描述的内置构造函数 file() 创建。3.6 ----- 脚注 (3.6) file( ) 在 Python 2.2 中是新的。较旧的内置 open() 是 file() 的别名。

于 2010-05-01T21:19:14.713 回答