【问题标题】:Python 3: Read UTF-8 file containing German umlautPython 3:读取包含德语变音符号的 UTF-8 文件
【发布时间】:2016-07-14 12:33:48
【问题描述】:

我搜索并发现了许多类似的问题和文章,但没有一个可以让我解决问题。

我在 Windows 10 上使用 Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)]。

我有一个简单的文本文件,它以 UTF-8 为 Windows 编码,如下所示:

我要做的就是将此文件的内容读入 Python 字符串并在标准控制台等中正确显示。

这是惨败的第一次尝试:

    file_name=r'c:\temp\encoding_test.txt'
    fh=open(file_name,'r')
    f_str=fh.read()
    fh.close()
    print(f_str)

打印语句引发异常:

'charmap' 编解码器无法对位置 100 中的字符 '\u201e' 进行编码:字符映射到未定义

使用调试器,f_str 包含以下内容:

'我希望在将此文件读入 Python 后正确显示以下字符:\n\nÄÖÜäöüß\n'

这对我来说已经很令人费解了。 Python 3 不是到处都使用 UTF-8 作为默认值吗?还有什么其他编码可以工作?我尝试了所有 Notepad++ 支持的,都没有。

好的,稍微复杂一点,我试过了:

    import codecs
    file_name=r'c:\temp\encoding_test.txt'
    my_encoding='utf-8'
    fh=codecs.open(file_name,'r',encoding=my_encoding)
    f_str=fh.read().encode(my_encoding)
    fh.close()
    print(f_str)

这至少不会引发异常,但会产生

b'我希望在将此文件读入 Python 后正确显示以下字符:\r\n\r\n\xc3\x84\xc3\x96\xc3\x9c\xc3\xa4\xc3\xb6\ xc3\xbc\xc3\x9f\r\n' 我

这对我来说完全是一团糟。这里有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: python encoding utf-8


    【解决方案1】:

    接受的答案太复杂了。您只需要为 open 指定编码:

    fh = open(file_name, encoding='utf8')
    

    而且一切正常。

    你其他问题的答案:

    Python 3 不是到处都使用 UTF-8 作为默认值吗?

    是“与外部世界(在这种情况下为文件系统)通信时,因为它与您的操作系统不一致”。规范说用户的首选编码取决于区域设置。做

    >>> import locale
    >>> locale.getpreferredencoding()
    

    查看它在您的系统上的内容 - 在 Windows 上很可能是“cp something”,具体取决于确切的默认代码页集。但是您始终可以使用显式 encoding 参数覆盖 open

    在那里,我希望你学到了一些新东西。 :-)

    【讨论】:

    • 更好的解决方案!
    【解决方案2】:

    在使用 codecs.open 后,您正在编码为字节,只需打印数据即可满足您的需求,正如我们解码时所见:

    In [31]: s = b'I would like the following characters to display correctly after reading this file into Python:\r\n\r\n\xc3\x84\xc3\x96\xc3\x9c\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\r\n'
    
    In [32]: print(s)
    b'I would like the following characters to display correctly after reading this file into Python:\r\n\r\n\xc3\x84\xc3\x96\xc3\x9c\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\r\n'
    
    In [33]: print(s.decode("utf-8"))
    I would like the following characters to display correctly after reading this file into Python:
    
    ÄÖÜäöüß
    

    如果您没有看到正确的输出,那么问题出在您的 shell 编码上。 Windows 控制台编码不是 utf-8,因此运行代码的位置和 shell 编码很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 2013-12-12
      • 2015-01-17
      • 2013-02-09
      • 2015-04-20
      • 1970-01-01
      • 2014-08-30
      相关资源
      最近更新 更多