【问题标题】:Problems parsing a text file (encoding?)解析文本文件时出现问题(编码?)
【发布时间】:2015-05-16 17:27:21
【问题描述】:

我正在尝试解析文本文件(Valve-KeyValues 语言文件),但遇到了一些问题。我正在使用这个library 来解析其他 KeyValues 文件,它可以从我收集到的内容中完美运行,但对于语言文件,它只返回一个空字典。
我尝试了一些简单的事情,比如遍历文件中的所有行并检查字符串是否存在(我知道字符串存在只是通过查看文件),但它永远不会找到它。不过,单个字符似乎可以工作。
如果我将这些行直接打印到控制台中,它看起来好像每个字符之间都有一个空格。 我将文件上传到我的谷歌驱动器here

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

【问题讨论】:

    标签: python file python-3.x


    【解决方案1】:

    确实,您的文件似乎被编码为 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'))
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-04
        • 2015-06-23
        • 2018-07-31
        • 2016-07-12
        • 2021-12-15
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        相关资源
        最近更新 更多