На этой неделе меня заинтересовало создание функции отправки 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 г.