На этой неделе меня заинтересовало создание функции отправки SMS на местном языке. Я работал, чтобы понять строку, Unicode, ASCII, UTF-8, UTF-16 и т. д.
ASCII: это 8-битные символы. Первая ASCII-таблица содержит 128 символов. Позже он был расширен для поддержки 256 символов.
UTF-8: ASCII изначально поддерживал английские символы, затем был расширен для поддержки большего количества символов, но не поддерживал другие языки, такие как русский, китайский и французский. В начале 1990-х годов стандарты Unicode были определены для поддержки кодирования для любого человеческого языка. Юникод был запущен с 16 бит вместо 8 бит. UTF-8 означает 8-битное число. Бит UTF-8, наиболее часто используемый стандарт Unicode
UTF-16: это означает, что Unicode представлен 16-битным числом. Это менее используемый стандарт Unicode.
Пример:
Случай 1: Обработка символов, отличных от ASCII
name_in_hindi = "सरीधर बूकि" name_in_hindi.encode('UTF-8')
результат
UnicodeDecodeError: 'ASCII' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
Ошибка:
Причина: строка Python будет обрабатывать символы ASCII, поскольку символы хинди не отображаются в таблице ASCII.
Исправление:
name_in_hindi = u"सरीधर बूकि" name_in_hindi.encode('UTF-8')
Бинго. Оно работает!
Причина: Не надо объяснять.. :)
В моем приложении: мне нужно отправить Unicode в виде шестнадцатеричных строк по стандарту UTF-16BE (этот стандарт кодирования будет предоставлен поставщиком услуг).
В Питоне:
import binascii utf8_hex = binascii.hexlify(name_in_hindi.encode('utf-8')) utf16_hex = binascii.hexlify(name_in_hindi.encode('utf-16BE')) print(utf8_hex) print(utf16_hex)
результат следующим образом:
E0A4B8E0A4B0E0A580E0A4A7E0A4B020E0A4ACE0A582E0A495E0A4BF 093809300940092709300020092C09420915093F
Пожалуйста, дайте мне знать ваши комментарии ниже. Спасибо.
Первоначально опубликовано на www.sreedharbukya.com 26 августа 2016 г.