解析文本文件时出现问题(编码?)

2024-09-22 14:38:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析一个文本文件(Valve KeyValues语言文件),但遇到了一些问题。我用这个library来解析其他KeyValues文件,从我收集到的数据来看,它工作得非常好,但是对于语言文件,它只返回一个空dict。
我尝试了一些简单的事情,比如遍历文件中的所有行,检查字符串是否存在(我只通过查看文件就知道字符串存在),但它永远找不到它。不过,单个字符似乎很管用。
如果我把这些行直接打印到控制台上,看起来好像每个字符之间都有一个空格。 我把文件上传到我的谷歌硬盘here。你知道吗

这是一个语言文件,所以我想它可以存储在一些不同的编码,但我无法找到任何通过谷歌/我真的不知道在这里搜索什么。你知道吗


Tags: 文件数据字符串语言编码herelibrary字符
2条回答

实际上,您的文件似乎编码为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的一个字节,后跟一个空字节,给出文本中的空格)。你知道吗

您可以尝试在加载文件时指定编码,例如使用^{} module

import codecs
import vdf
d = vdf.load(codecs.open('dota_english.txt', 'r', encoding='utf-16'))

它看起来像一种json文件,里面有xml。你能上传你的源代码吗?有许多json解析器。您可以使用内置的json模块和xmllib。你知道吗

相关问题 更多 >