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

标签 python encoding utf-16

最近我在用 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

在尝试读取文件内容之后。我也试过强制 little-endian,但这并不好。文件头如下:

0x FE FF EE FF

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

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

这可以让我得到原始的十六进制,但问题是 - 有时这些文件是小端,有时它们是大端,所以我基本上只想在开始解析之前规范化数据,我是希望编解码器能够帮助我,但没有运气..

有人知道这里发生了什么吗?我会提供文件作为引用,但有一些敏感数据,所以很遗憾我不能。 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 二进制字节的 header 。所以你可以读取二进制文件并在之后解码:

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

但可能还有其他二进制部分。在不知道确切的文件格式的情况下,无法提供更多帮助。

关于python - 在 Python 中打开和读取 UTF-16 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31251807/

相关文章:

python - 使用 sox 和 python 根据时间戳列表使音频区域静音

python - 如何使用 2 个条件中的任何一个拆分行?

python - 为什么在 Python 中只有当有 print 语句时才会出现 UnicodeEncodeError?

ubuntu - Samba 共享编码与 UTF-8 问题

javascript - JavaScript 中奇怪的意外标记非法

Java charAt 用于具有两个代码单元的字符

python - 为什么pip卸载不了pysqlite?

python - 将文本文件读入变量,后续 print() 返回转义字符?

javascript - 为什么在ECMAScript 6中,U + D800和U + DBFF之间的代码点会生成一个一字串的字符串?

python - 在测试期间,Pickle 无法将对象存储在 django locmem 缓存中?