簡體   English   中英

Python 3-UnicodeEncodeError:“ charmap”編解碼器無法編碼字符(編碼后在文件中)

[英]python 3 - UnicodeEncodeError: 'charmap' codec can't encode character (Encode so it's in a file)

我目前正在嘗試獲取帳戶的推文並將其以特定的格式寫入文件中,但有時該帳戶在編解碼器之外使用表情符號和其他字符,因此在閱讀推文時,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。

如果您想閱讀更多有關編碼如何工作以及為什么會發生此類問題的有趣細節,那么這篇博客文章是一個不錯的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM