代码之家  ›  专栏  ›  技术社区  ›  Mikesname

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

  •  5
  • Mikesname  · 技术社区  · 16 年前

    我正在读取一个包含大量宽字符字符串的二进制文件,我想将这些字符串作为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字符串?

    编辑:我正在使用python2.6

    4 回复  |  直到 16 年前
        1
  •  8
  •   interjay    16 年前
    >>> data = 'S\x00e\x00r\x00i\x00e\x00s\x00'
    >>> data.decode('utf-16')
    u'Series'
    
        2
  •  3
  •   Delimitry COLD TOLD    12 年前

    rstrip 具有 '\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  "
    
        3
  •  2
  •   kismet    15 年前

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

    >>> 'S\x00e\x00r\x00i\x00e\x00s\x00'[::2]
    'Series'
    
        4
  •  0
  •   Nas Banov    16 年前

    嗯,你为什么说“打开”比“文件”更合适?我在参考资料(Python2.5)中看到:

    3.9文件对象文件对象使用C的stdio包实现 第2.1节,“内置”