UT8问题-有没有办法在Python中将外观怪异的字符¤转换为其正确的德语字符ä?

时间:2018-08-27 11:41:39

标签: python utf-8 diacritics

我有一个.txt文件,其中应包含ä,ö,ß,ü之类的德国Umlaut。但是,这些字符并没有出现,而是出现了¤而不是ä,Ã而不是Ü,以此类推。这是因为.txt文件以ANSI编码存储。现在,当我在SAS(DataStep)或Python(带有.read_csv)中导入具有相应列作为字符串的此文件时,这些奇怪的字符会原样出现在.sas7bat和Python DataFrame中,而不是像ä这样的正确字符。 ,ö,ü,ß。

要解决此问题的解决方法是-

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

现在,当您使用SAS或Python导入文件时,一切都将正确导入。

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

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

是否有任何Python库可以自动将这些奇怪的字符转换为适当的字符-就像¤被转换为ä等等?

2 个答案:

答案 0 :(得分:2)

您尝试使用编解码器库吗?

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

答案 1 :(得分:0)

如果文件包含正确的代码点,您只需指定正确的编码。 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 问题。