当前位置: 代码迷 >> python >> Python 3-UnicodeEncodeError:“ charmap”编解码器无法编码字符(编码后在文件中)
  详细解决方案

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

热度:35   发布时间:2023-07-14 08:43:25.0

我目前正在尝试获取帐户的推文并将其以特定的格式写入文件中,但有时该帐户在编解码器之外使用表情符号和其他字符,因此在阅读推文时,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

如果我需要提供更多信息,请告诉我。 提前致谢!

简短的答案:

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

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

长答案:

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

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

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

如果您想阅读更多有关编码如何工作以及为什么会发生问题的有趣细节,那么是一个不错的起点。