我正在尝试解析一个文本文件(Valve-KeyValues 语言文件),但遇到了一些问题。我正在使用这个library解析其他 KeyValues 文件,根据我收集到的信息,它工作得很好,但对于语言文件,它只返回一个空字典。
我尝试了一些简单的事情,例如迭代文件中的所有行并检查字符串是否存在(我通过查看文件就知道该字符串存在),但它从未找到它。不过,单个字符似乎可以工作。
如果我将这些行直接打印到控制台中,看起来好像每个字符之间都有一个空格。
我将文件上传到我的谷歌驱动器 here 。
这是一个语言文件,所以我猜它可以以某种不同的编码存储,但我无法通过谷歌找到任何内容/我真的不知道要在这里搜索什么。
最佳答案
确实,您的文件似乎被编码为 UTF-16:
$ file ~/Downloads/dota_english.txt
~/Downloads/dota_english.txt: Little-endian UTF-16 Unicode C++ program
text, with very long lines, with CRLF line terminators
这符合您对“每个字符之间有一个空格”的描述( UTF-16 是一个两字节编码;对于 ASCII 文本,这意味着每个字符都表示为一个 ASCII 字节,后跟一个空字节,给出文本中的空格)。
您可以尝试在加载文件时指定编码,例如使用 codecs
module :
import codecs
import vdf
d = vdf.load(codecs.open('dota_english.txt', 'r', encoding='utf-16'))
关于python - 解析文本文件时出现问题(编码?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30278687/