【问题标题】:UT8 issue - Is there a way to convert strange looking characters ä to its proper German character ä in Python?UT8 问题 - 有没有办法在 Python 中将奇怪的字符 ä 转换为正确的德语字符 ä?
【发布时间】:2019-02-01 22:42:37
【问题描述】:

我有一个 .txt 文件,其中应包含德语变音符号,如 ä,ö,ß,ü。但是,这些字符并不是这样出现的,而是出现的是 ä 而不是 ä、à 不是 Ü 等等。发生这种情况是因为 .txt 文件以 ANSI 编码存储。现在,当我在 SAS(DataStep)或 Python(使用 .read_csv)中导入此文件时,将相应的列作为字符串,然后这些奇怪的字符出现在 .sas7bat 和 Python DataFrame 中,而不是像 ä 这样的正确字符,ö,ü,ß。

解决此问题的一个解决方法是 -

  1. 在标准记事本中打开文件。
  2. 按“另存为”,然后会出现一个窗口。
  3. 然后在下拉菜单中,将编码更改为 UTF-8。

现在,当您在 SAS 或 Python 中导入文件时,所有内容都已正确导入。

但是,有时我拥有的 .txt 文件非常大(以 GB 为单位),因此我无法打开它们并执行此 hack 来解决此问题。

我可以使用 .replace() 函数将这些奇怪的字符替换为真实的字符,但是可能会有一些我不知道的奇怪字符的组合,这就是我希望避免这种情况的原因。

是否有任何 Python 库可以自动将这些奇怪的字符翻译成正确的字符——比如 ä 被翻译成 ä 等等?

【问题讨论】:

    标签: python utf-8 diacritics


    【解决方案1】:

    如果文件包含正确的代码点,您只需指定正确的编码。 Python 3 在大多数正常平台上默认为 UTF-8,但如果您需要代码也可以在 Windows 上运行,您可能需要拼出编码。

    with open(filename, 'r', encoding='utf-8') as f:
       # do things with f
    

    如果文件实际上包含mojibake,则在一般情况下没有简单的方法来恢复所有可能的方式来搞砸文本,但一个常见的错误是假设文本是 Latin-1 并将其转换为 UTF-8 时事实上,输入已经是 UTF-8。然后你可以做的是你想要Latin-1,并且可能确保你在阅读后立即以正确的格式保存它。

    with open(filename, 'r', encoding='latin-1') as inp, \
         open('newfile', 'w', encoding='utf-8') as outp:
        for line in inp:
            outp.write(line)
    

    ftfy 库声称能够识别和纠正一些常见的 mojibake 问题。

    【讨论】:

      【解决方案2】:

      您是否尝试使用编解码器库?

      import codecs
      your_file= codecs.open('your_file.extension','w','encoding_type')
      

      【讨论】:

      • 感谢您的留言。对不起,它没有帮助。我正是以这种方式尝试的。首先,我阅读了文件并最终编写了它,就像这里显示的 stackoverflow.com/questions/19591458/… ,但仍然是相同的问题。
      • 你用的是python 2还是python 3?
      • 嗨,我使用的是 Python 3.+ 而不是 Python 2+,旧版本。
      猜你喜欢
      • 2021-03-26
      • 2017-04-09
      • 2021-03-03
      • 2015-09-11
      • 2023-01-30
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多