Python - 读取奇怪的 utf-16 格式的文本文件

标签 python numpy encoding utf-16le

我正在尝试将文本文件读入 python,但它似乎使用了一些非常奇怪的编码。我像往常一样尝试:

file = open('data.txt','r')

lines = file.readlines()

for line in lines[0:1]:
    print line,
    print line.split()

输出:

0.0200197   1.97691e-005

['0\x00.\x000\x002\x000\x000\x001\x009\x007\x00', '\x001\x00.\x009\x007\x006\x009\x001\x00e\x00-\x000\x000\x005\x00']

打印线条效果很好,但在我尝试拆分线条以便将其转换为 float 后,它看起来很疯狂。当然,当我尝试将这些字符串转换为 float 时,会产生错误。关于如何将这些转换回数字的任何想法?

如果您想尝试加载它,我将示例数据文件放在这里: https://dl.dropboxusercontent.com/u/3816350/Posts/data.txt

我想简单地使用 numpy.loadtxt 或 numpy.genfromtxt,但他们也不想处理这个疯狂的文件。

最佳答案

我敢打赌这是一个 UTF-16-LE 文件,而您正在阅读它的默认编码是什么。

在 UTF-16 中,每个字符占用两个字节。*如果您的字符都是 ASCII,这意味着 UTF-16 编码看起来像 ASCII 编码,每个字符后都有一个额外的 '\x00'。

要解决这个问题,只需解码数据:

print line.decode('utf-16-le').split()

或者使用 io 或 codecs 模块在文件级别做同样的事情:

file = io.open('data.txt','r', encoding='utf-16-le')

* 这有点过于简单化了:每个 BMP 字符占用两个字节;每个非 BMP 字符都变成一个代理项对,两个代理项中的每一个占用两个字节。但您可能并不关心这些细节。

关于Python - 读取奇怪的 utf-16 格式的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19328874/

相关文章:

python - 编码斯洛伐克语字母,如 : á š Č é

python - 使用 .loc 在 Pandas 中进行多选

Python pandas - 每第二行而不是每第二个工作日重新采样一次

python - Easy_install 和 Pip 不起作用

python - 将 vlen 与 h5py 一起使用时出现莫名其妙的行为

python - 基本 numpy 乘法的问题

java - 在 Java JNI 中获取真正的 UTF-8 字符

java - 编码问题; .jar 不适用于 UTF-8 文件中的西里尔字符

python - 整数转二进制

python - np.squeeze 进行作业