【问题标题】:Python lists with scandinavic letters带有斯堪的纳维亚字母的 Python 列表
【发布时间】:2013-07-01 11:50:09
【问题描述】:

谁能解释造成这种情况的原因,以便更好地了解环境?

emacs, unix

输入:

with open("example.txt", "r") as f:
    for files in f:
        print files
        split = files.split()
        print split

输出:

Hello world
['Hello', 'world']
Hello wörld
['Hello', 'w\xf6rld']

【问题讨论】:

  • 你使用的是什么编码。

标签: python list encoding


【解决方案1】:

Python 正在打印字符串表示形式,其中包括一个不可打印的字节。不可打印的字节(ASCII 范围之外的任何内容或控制字符)显示为转义序列。

关键是您可以复制该表示并将其粘贴到 Python 代码或解释器中,生成完全相同的值。

\xf6 转义码表示具有十六进制值 F6 的字节,当解释为 Latin-1 字节值时,是 ö 字符。

您可能希望将该值解码为 Unicode 以一致地处理数据。如果您还不知道 Unicode 到底是什么,或者想了解有关编码的任何其他信息,请参阅:

【讨论】:

    【解决方案2】:

    在 python 中,列表只是使用 unicode 编码打印出来的。基本上打印一个列表会使列表在每个元素上调用__repr__(这会导致字符串的unicode打印)。如果您单独打印每个元素(在这种情况下使用字符串 __str__ 方法,而不是列表的方法),您会得到您所期望的。

    with open("example.txt", "r") as f:
        for inp in f:
            files = inp.decode('latin-1') // just to make sure this works on different systems
            print files
            split = files.split()
            print split
            print split[0]
            print split[1]
    

    输出:

    hello world
    
    [u'hello', u'world']
    hello
    world
    hello wörld
    [u'hello', u'w\xf6rld']
    hello
    wörld
    

    【讨论】:

      【解决方案3】:

      python-mode.el

      为 Python3 调整打印表单后

      py-execute-buffer-python3

      打印效果很好:

      世界你好

      ['Hello', 'world']
      

      你好世界

      ['Hello', 'wörld']
      

      【讨论】:

        猜你喜欢
        • 2018-11-14
        • 2014-06-10
        • 2018-08-14
        • 1970-01-01
        • 2016-04-10
        • 1970-01-01
        • 2011-08-28
        • 2014-11-03
        • 2016-06-08
        相关资源
        最近更新 更多