繁体   English   中英

在Python中打开和读取UTF-16文件

[英]Opening and reading UTF-16 files in Python

最近我在使用Python打开特定的UTF-16编码文件时遇到了麻烦。 我尝试过以下方法:

import codecs
f = codecs.open('filename.data', 'r', 'utf-16-be')
contents = f.read()

但是我收到以下错误:

UnicodeDecodeError: 'utf16' codec can't decode bytes in position 18-19: illegal UTF-16 surrogate

在尝试读取文件的内容之后。 我也试过强迫小端,但这并不好。 文件头如下:

0x FE FF EE FF

我读过的是UTF-16 Big Endian。 我已经能够使用以下内容将文件的内容读入原始字符串:

f = open('filename.data', 'rb')
raw = f.read()
hex = binascii.hexlify(raw)

这对于获取原始十六进制是有效的,但问题是 - 有时这些文件将是小端的,有时它们将是big-endian所以我基本上只是想在开始解析之前规范化数据,我希望编解码器会能够帮助我,但没有运气..

有没有人知道这里发生了什么? 我会提供文件作为参考,但有一些敏感数据,所以不幸的是我不能。 Windows操作系统使用此文件。

正如我上面提到的,我的最终目标是能够打开/读取这些文件并对它们进行规范化,以便我可以对所有这些文件使用相同的解析器,而不是必须编写一些带有大量错误处理的解析器。编码是古怪的。

编辑:根据要求,文件的前32个字节:

FE FF EE FF 11 22 00 00 03 00 00 00 01 00 00 00 
92 EC DA 48 1B 00 00 00 63 00 3A 00 5C 00 77 00

在utf16编码的字符串开始之前,您看起来有24个二进制字节的标头。 因此,您可以将文件读取为二进制文件并在之后解码:

with open(filename, "rb") as data:
    header = data.read(24)
    text = data.read().decode('utf-16-le')

但可能还有其他二进制部分。 如果不知道确切的文件格式,就无法获得更多帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM