Python 3-UnicodeEncodeError:“ charmap”编解码器无法编码字符(编码后在文件中)

时间:2018-09-16 06:38:52

标签: python python-3.x unicode encoding

我目前正在尝试获取帐户的推文,并将它们以特定格式写入文件中,但是有时该帐户在编码解码器之外使用表情符号和其他字符,因此在阅读推文时,Python会吓跑并给我出现以下错误(尽管我需要一个可以与Python不喜欢的任何字符一起使用的修复程序,但它不喜欢的特定字符是希腊字母“χ”,如果有任何帮助,则有帮助):

UnicodeEncodeError: 'charmap' codec can't encode character '\u03c7' in position 4: character maps to <undefined>

我尝试在字符串的末尾添加.encode("utf-8"),但是当我实际上需要将单词写到不同的行时,最终将原始文本数据写到文件中。到目前为止,这是我的代码(代码本身可以工作,因为它读取数据并将其放入所需的格式,因此我不需要任何帮助,只需要写文件即可。):

    with open("LSData.txt", "a") as file:
        for status in tl:
            wordList = status.full_text.split(" ")
            for word in wordList:

                try:
                    if("http" not in word):
                        if(word == wordList[0] or
                           wordList[wordNum-1][len(wordList[wordNum-1])-1] == "." or
                           wordList[wordNum-1][len(wordList[wordNum-1])-1] == "!" or
                           wordList[wordNum-1][len(wordList[wordNum-1])-1] == "?"):

                            wordsToAdd = "-"  + word + " " + wordList[wordNum+1] + "\n"
                            file.write(wordsToAdd)

                        else:
                            wordsToAdd = word + " " + wordList[wordNum+1] + "\n"
                            file.write(wordsToAdd)



                except(IndexError):
                    pass

                wordNum += 1

如果我需要提供更多信息,请告诉我。预先感谢!

1 个答案:

答案 0 :(得分:2)

简短答案:

您需要使用UTF-8编码打开文件。

    with open("LSData.txt", "a", encoding="utf-8") as file:

详细答案:

您看到的错误是在Python尝试将字符写入文件时生成的,但是您打开文件时使用的编码不支持该字符。

在上面的代码中,使用open时没有指定编码,在这种情况下,Python将为您的语言环境使用默认编码。这会因系统而异,并且看起来系统的默认语言环境不支持希腊字母“χ”。

要解决此问题,请在打开文件时指定一种编码,并且所使用的编码需要支持所有要写入的字符。这通常意味着使用一种Unicode编码,最常见的Unicode编码是UTF-8。如果可以选择使用哪种编码,那么如今,最好的做法是在打开文件时都使用UTF-8。

如果您想更多地了解有关编码如何工作以及为什么会发生此类问题的有趣细节,this blog post是一个很好的起点。