python 3 - UnicodeEncodeError:'charmap'编解码器无法编码字符(编码,使其在文件中)



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

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

我尝试在 String 的末尾添加.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。

如果您想更多地了解编码如何工作以及为什么会发生这样的问题的迷人细节,这篇博文是一个很好的起点。

最新更新