Python-将宽字符字符串从二进制文件转换为Python unicode字符串

Python-将宽字符字符串从二进制文件转换为Python unicode字符串,python,string,binaryfiles,Python,String,Binaryfiles,这是漫长的一天,我有点不知所措 我正在读取一个包含大量宽字符字符串的二进制文件,我想将它们作为Python unicode字符串转储。(要解压非字符串数据,我使用struct模块,但不知道如何对字符串进行解压。) 例如,阅读“系列”一词: 如何将原始宽字符数据编码为Python字符串 编辑:我使用的是Python 2.6,为什么说“打开”比“文件”更可取?我在参考资料(python 2.5)中看到: >>> data = 'S\x00e\x00r\x00i\x00e\x00s\

这是漫长的一天,我有点不知所措

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

例如,阅读“系列”一词:

如何将原始宽字符数据编码为Python字符串

编辑:我使用的是Python 2.6,为什么说“打开”比“文件”更可取?我在参考资料(python 2.5)中看到:

>>> data = 'S\x00e\x00r\x00i\x00e\x00s\x00'
>>> data.decode('utf-16')
u'Series'
3.9文件对象文件对象使用C的stdio包实现 并且可以使用内置的 中描述的构造函数文件() 第2.1节,“内置” 函数。“”3.6-----脚注(3.6)file()在Python 2.2中是新的。较旧的内置open()是file()的别名


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

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

我还建议在解码后将
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  "

文件
不应用于打开文件<代码>打开处于打开状态<代码>编解码器。如果这确实是一个文本文件,但编码有点奇怪,那么打开非常好。Mike G-非常正确,我已经更正了这个示例。实际上,我通常使用“open”,但今天我的ipython外壳出现了一些问题,它给了我一个模糊的错误。我可能会用其他东西覆盖它。
>>> "Some Data  "