python 3 - UnicodeEncodeError:“charmap”编解码器无法编码字符(编码,使其位于文件中)

Sam*_*mel 0 python unicode encoding python-3.x

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

\n\n
UnicodeEncodeError: \'charmap\' codec can\'t encode character \'\\u03c7\' in position 4: character maps to <undefined>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
    with open("LSData.txt", "a") as file:\n        for status in tl:\n            wordList = status.full_text.split(" ")\n            for word in wordList:\n\n                try:\n                    if("http" not in word):\n                        if(word == wordList[0] or\n                           wordList[wordNum-1][len(wordList[wordNum-1])-1] == "." or\n                           wordList[wordNum-1][len(wordList[wordNum-1])-1] == "!" or\n                           wordList[wordNum-1][len(wordList[wordNum-1])-1] == "?"):\n\n                            wordsToAdd = "-"  + word + " " + wordList[wordNum+1] + "\\n"\n                            file.write(wordsToAdd)\n\n                        else:\n                            wordsToAdd = word + " " + wordList[wordNum+1] + "\\n"\n                            file.write(wordsToAdd)\n\n\n\n                except(IndexError):\n                    pass\n\n                wordNum += 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

Jac*_*lor 5

简短的回答:

\n\n

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

\n\n
    with open("LSData.txt", "a", encoding="utf-8") as file:\n
Run Code Online (Sandbox Code Playgroud)\n\n

长答案:

\n\n

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

\n\n

在上面的代码中,您在使用时没有指定编码open,在这种情况下,Python 将使用您的语言环境的默认编码。这因系统而异,并且您的系统的默认区域设置似乎不支持希腊字母“\xcf\x87”。

\n\n

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

\n\n

如果您想详细了解编码如何工作以及为什么会发生此类问题,这篇博文是一个很好的起点。

\n