python unicode — encode/decode, приведение к строке


Значения объектов типа 'string' по умолчанию задается в Python unicode. Приведение к строке требуется обычно для объектов типа bytes.

Они получаются при обработке вывода, например, subprocess.



Методы python unicode — encode/decode


Юникод нужен при работе с символами нескольких языков. Кириллица, буквы греческого алфавита, иероглифы и т.п. не будут передаваться при вводе их через формы обратной связи.



Выполнение скрипта будет завершаться ошибкой если не использовать юникод:

[Sat Aug 25 04:40:52.573105 2018] [cgid:error] [pid 28564:tid 139992957437696] [client 123.123.123.123:40958] End of script output before headers: add.cgi, referer: http://example.com/page.html
Traceback (most recent call last):
File «/var/www/site/restore.cgi», line 44, in <module>
print («<h2>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0635 \u043e\u0442\u043f\u0440\u0430\\u0435\u043d\u043e. \u041f\u043e\u0436\u0430\u043b\u0443\u0479\u0441\u0442\u0430, \u043e\u0436\u0438\u0434\u0430\u0439\u0442\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 </h2>»)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 4-12: ordinal not in range(128)



Из сообщения об ошибке следует, что кодек ascii не может обрабатывать символы в кодировке, отличной от ASCII. Чтобы работать с этими символами требуется UTF-8.



В юникоде символы кодируются и приводятся к виду \uXXXX. Затем обрабатываются скриптом, далее можно выполнить обратное преобразование.



Можно использовать два метода (переменная text содержит объект bytes с юникодом):

1)

text.decode('utf-8')

2)

str(text, 'utf-8')



Приведение к строке


Определяем переменную

>> text = 'русский текст'



Переводим значение в юникод

>> text.encode('utf-8')

b'\xd1\x80\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9 \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82'



>> encoded = text.encode('utf-8')



Тип объекта должен быть bytes

> print (type(encoded))

<class 'bytes'>



Теперь текст можно расшифровать

>> print (encoded.decode('utf-8'))

русский текст



Читайте также про метод join в python, он позволяет объединить элементы в строку.

Сказать спасибо