Автор оригинала: Shubham Sayon.
Резюме: UnicodeeCodeError обычно происходит при кодировании строки Unicode в определенное кодирование. Только ограниченное количество символов Unicode отображается на строки. Таким образом, любой символ, который не представляется/сопоставлен/сопоставлен, приведет к провалинию кодирования и повышать UnicodeEcodeEnror. Чтобы избежать этого Ошибка . Используйте кодирование ( UTF-8
) и декодировать ( utf-8
), соответствующим образом в вашем коде.
Вы можете использовать обработку кода приложений, который необходимо иметь дело с многоязычными данными или веб-контентом, который имеет много эмохий и специальных символов. В таких ситуациях вы, возможно, посмотрим многочисленные проблемы, связанные с данными Unicode. Но Python имеет четко определенные варианты, чтобы иметь дело с персонажами Unicode, и мы обсуждаем их в этой статье.
💡 Что такое Unicode?
Unicode является стандартом, который облегчает кодировку символов с использованием кодировки переменной биты. Я уверен, что вы, должно быть, слышали о ASCII, если вы находитесь в мир компьютерных программиров. ASCII представляет 128 символов, в то время как Unicode определяет 2 21 персонажи. Таким образом, Unicode можно рассматривать как сумерее ASCII. Если вы заинтересованы в том, чтобы иметь глубокий взгляд на Unicode, пожалуйста, следуйте этому ссылка на сайт. Нажмите на Unicode: – U + 1F40D Чтобы узнать, что он представляет! (Попробуйте !!! 😉)
🐞 Что такое UnicodeEcodeError?
Лучший способ понять любую концепцию – визуализировать его при примере. Итак, давайте посмотрим на пример UnicodeEcodeError
Отказ
u = 'é' print("Integer value for é: ", ord(u)) print("Converting the encoded value of é to Integer Equivalent: ", chr(233)) print("UNICODE Representation of é: ", u.encode('utf-8')) print("ASCII Representation of é: ", u.encode('ascii'))
Выход
Integer value for é: 233 Converting the encoded value of é to Integer Equivalent: é UNICODE Representation of é: b'\xc3\xa9' Traceback (most recent call last): File "main.py", line 5, inprint("ASCII Representation of é: ",u.encode('ascii')) UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 0: ordinal not in range(128)
В приведенном выше коде, когда мы пытались кодировать персонажа é к Его значение Unicode мы получили выход, но при попытке преобразовать его в эквивалент ASCII, мы столкнулись с ошибкой. Произошла ошибка, поскольку ASCII позволяет только 7-битное кодирование, и она не может представлять символы за пределами диапазона [0..128].
Теперь у вас есть сущность того, что UnicodeEcodeError
похоже. Перед обсуждением того, как мы можем избежать таких ошибок, я чувствую, что есть ужасную необходимость обсудить следующие концепции:
💡 Кодирование и декодирование
Процесс преобразования человечески читаемых данных в указанный формат, для обеспеченной передачи данных известен как кодирование. Декодирование – это противоположность кодировке, которое является преобразованием кодированной информации в нормальный текст (читаемая для чтения человека).
В Python,
кодировать ()
это встроенный метод, используемый для кодирования. В случае не указана кодировка, UTF-8 используется в качестве по умолчанию.декодировать ()
это встроенный метод, используемый для декодирования.
Пример:
u = 'Πύθωνος' print("UNICODE Representation of é: ", u.encode('utf-8'))
Выход:
UNICODE Representation of é: b'\xce\xa0\xcf\x8d\xce\xb8\xcf\x89\xce\xbd\xce\xbf\xcf\x82'
Следующая диаграмма должна сделать вещи немного легче:
💡 CodePoint
Unicode отображает CodePoint к своим соответствующим персонажам. Итак, что мы подразумеваем под кодом?
- CodePoints являются числовыми значениями или целые числа, используемые для представления символа.
- Кодовая точка Unicode для ES
U + 00E9
который является целым числом 233. Когда вы кодируете символ и распечатаете его, вы, как правило, получаете его шестнадцатеричное представление в качестве вывода вместо его двоичного эквивалента (как видно в приведенных выше примерах). - Последовательность байтов кодовой точки отличается в разных схем кодирования. Например: последовательность байтов для É в
UTF-8
это\ xc3 \ xa9
в то время как вUTF-16
это \ xff \ xfe \ xe9 \ x00.
Пожалуйста, посмотрите на следующую программу, чтобы получить лучшее сцепление на эту концепцию:
u = 'é' print("INTEGER value for é: ", ord(u)) print("ENCODED Representation of é in UTF-8: ", u.encode('utf-8')) print("ENCODED Representation of é in UTF-16: ", u.encode('utf-16'))
Выход
INTEGER value for é: 233 ENCODED Representation of é in UTF-8: b'\xc3\xa9' ENCODED Representation of é in UTF-16: b'\xff\xfe\xe9\x00'
Теперь, когда у нас есть обзор Unicode и UnicodeEcodeError
Давайте обсудим, как мы можем справиться с ошибкой и избежать ее в нашей программе.
➥ Проблема: Учитывая строку/текст, который будет написан в текстовом файле; Как избежать UnicodeEcodeError и напишите данный текст в текстовом файле.
Пример:
f = open('demo.txt', 'w') f.write('να έχεις μια όμορφη μέρα') f.close()
Выход :
Traceback (most recent call last): File "uniError.py", line 2, inf.write('να έχεις μια όμορφη μέρα') File "C:\Users\Shubham-PC\AppData\Local\Programs\Python\Python38-32\lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-1: character maps to
Желаемый вывод :
✨ Решение 1: кодировать строку перед записью в файл и декодировать во время чтения
Вы не можете писать Unicode в файл напрямую. Это поднимет UnicodeEcodeError
Отказ Чтобы избежать этого, вы должны кодировать Unicode строка используя кодировать ()
Функция, а затем запишите ее в файл, как показано в программе ниже:
text = u'να έχεις μια όμορφη μέρα' # write in binary mode to avoid TypeError f = open('demo.txt', 'wb') f.write(text.encode('utf8')) f.close() f = open('demo.txt', 'rb') print(f.read().decode('utf8'))
Выход
✨ Решение 2: Открытый файл в UTF-8
Если вы используете Python 3 или выше, все, что вам нужно сделать, это открыть файл в UTF-8
, поскольку обработка строки Unicode уже стандартизирована в Python 3.
text = 'να έχεις μια όμορφη μέρα' f = open('demo2.txt', 'w', encoding="utf-8") f.write(text) f.close()
Выход
✨ Решение 3: Использование модуля кодеков
Еще один подход к борьбе с UnicodeEcodeError
использует кодеки модуль.
Давайте посмотрим на следующий код, чтобы понять, как мы можем использовать модуль кодеков:
import codecs f = codecs.open("demo3.txt", "w", encoding='utf-8') f.write("να έχεις μια όμορφη μέρα") f.close()
Выход
✨ Решение 4: Использование модуля Unicodecsv Python
Если вы имеете дело с данными Unicode и используете CSV-файл Для управления вашими данными, то Unicodecsv
Модуль может быть действительно полезным. Это расширенный Версия Python 2’s CSV
Модуль и помогает пользователю обрабатывать данные Unicode без каких-либо проблем.
Так как Unicodecsv
Модуль не является частью стандартной библиотеки Python, вы должны установить его перед использованием. Используйте следующую команду для установки этого модуля:
$ pip install unicodecsv
Давайте посмотрим на следующий пример, чтобы получить лучшее сцепление на Unicodecsv
Модуль:
import unicodecsv as csv with open('example.csv', 'wb') as f: writer = csv.writer(f, encoding='utf-8') writer.writerow(('English', 'Japanese')) writer.writerow((u'Hello', u'こんにちは'))
Выход
Вывод
В этой статье мы обсудили некоторые важные концепции, касающиеся персонажа Unicode, а затем продолжали узнать о UnicodeEcodeError и, наконец, обсудили методы, которые мы можем использовать, чтобы избежать его. Я надеюсь, что к концу этой статьи вы можете с легкостью обрабатывать символы Unicode в вашем Python.
Пожалуйста, подпишитесь и оставайтесь настроенными для более интересных статей!
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @: