Рубрики
Без рубрики

Ошибка кодирования Unicode Python

Резюме: UnicodeEcodeError, как правило, происходит при кодировании строки Unicode в определенное кодирование. Только ограниченное количество символов Unicode отображается на строки. Таким образом, любой символ, который не представляется / сопоставлен / сопоставлен, приведет к провалинию кодирования и повышать UnicodeEcodeEnror. Чтобы избежать этой ошибки, используйте функции кодирования (UTF-8) и декодирования (UTF-8), соответствующим образом в вашем … Ошибка кодирования Unicode Unicode Read больше »

Автор оригинала: 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, in 
    print("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, in 
    f.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.

Вы можете связаться со мной @: