Python 3 - UnicodeEncodeError: кодек 'charmap' не может кодировать символ (кодировать, поэтому он находится в файле) - PullRequest
0 голосов
/ 16 сентября 2018

В настоящее время я пытаюсь получить твиты учетной записи и записать их в определенном формате в файл, но иногда учетная запись использует эмоджи и другие символы вне кодека, поэтому при чтении твитов 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 голосов
/ 16 сентября 2018

Краткий ответ:

Вам необходимо открыть файл с кодировкой UTF-8.

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

Длинный ответ:

Ошибка, которую вы видите, генерируется, когда Python пытается записать символ в файл, но кодировка, с которой вы открыли файл, не поддерживает этот символ.

В приведенном выше коде вы не указываете кодировку при использовании open, и в этом случае Python будет использовать кодировку по умолчанию для вашей локали. Это зависит от системы, и похоже, что локаль по умолчанию для вашей системы не поддерживает греческую букву "χ".

Чтобы исправить это, вам нужно указать кодировку при открытии файла, а используемая кодировка должна поддерживать все символы, которые вы хотите написать. Обычно это означает использование одной из кодировок Unicode, и наиболее распространенной кодировкой Unicode является UTF-8. Если у вас есть выбор в отношении того, какую кодировку следует использовать, в настоящее время рекомендуется использовать UTF-8 при каждом открытии файла.

Если вы хотите узнать больше о захватывающих деталях того, как работают кодировки и почему возникают подобные проблемы, этот пост - хорошее место для начала.

...