LINUX.ORG.RU

Кто такой utf-8?

Оъясните мне, кто такой utf-8? Я всегда думал что UTF'ы начинаются с 16.

Camel ★★★★★
()

Слоупок, это ты?

anonymous
()
Ответ на: Кто такой utf-8? от Camel

UTF-8(7)                Руководство программиста Linux                UTF-8(7)

НАИМЕНОВАНИЕ
       UTF-8 - ASCII-совместимая многобайтная кодировка Unicode

ОПИСАНИЕ
       Набор символов Unicode покрывает 16-битное пространство кодов. Наиболее
       очевидная   кодировка   Unicode,   известная   как   UCS-2,    содержит
       последовательности   16-битных   слов.  Такие  строки  могут  содержать
       комбинации символов (например ’\0’ или ’/’), которые имеют  специальное
       значение  в  именах  файлов  и  других параметрах функций из библиотеки
       языка  C.   Кроме  того,  большинство  утилит  UNIX  предназначены  для
       обработки  ASCII-файлов,  и  не  могут  читать  16-битные  символы  без
       специальной модификации. По этим причинам UCS-2  является  неподходящей
       кодировкой  Unicode  в  именах  файлов,  текстовых  файлах,  переменных
       окружения и т. д. Стандарт ISO 10646  Universal  Character  Set  (UCS),
       являющийся  надмножеством Unicode, покрывает уже 31-битное пространство
       кодов,   а   используемая   для   него   очевидная   кодировка    UCS-4
       (последовательность 32-битных слов) имеет те же проблемы.

       Кодировка  Unicode  и UCS под названием UTF-8 лишена этих недостатков и
       являются наиболее подходящей для использования набора символов  Unicode
       в Unix-подобных операционных системах.

СВОЙСТВА

       Кодировка UTF-8 обладает следующими привлекательными свойствами:

       * UCS-символы  с  кодами  от  0x00000000  до  0x0000007f  (классические
         символы из набора US-ASCII ) кодируются как байты с  кодами  0x00  до
         0x7f  (совместимость  с  кодовой  таблицей ASCII).  Это означает, что
         файлы и строки, содержащие только 7-битные ASCII символы, будут иметь
         одинаковое представление как в ASCII, так и в UTF-8.

       * Все   UCS-символы  с  кодами  >  0x7f  кодируются  как  многобайтовые
         последовательности, содержащие только байты в диапазоне  от  0x80  до
         0xfd,  так  что ASCII байты не окажутся частью другого символа и, как
         следствие, не будет проблем с использованием ’\0’ or ’/’.

       * Сохраняется лексикографический  порядок  сортировки  строк  кодировки
         UCS-4.

       * При  помощи  UTF-8  могут  быть закодированы все возможные 2^31 кодов
         UCS.

       * В кодировке UTF-8 никогда не используются байты с кодами 0xfe и 0xff.

       * Первый  байт  многобайтовой  последовательности,  представляющей один
         не-ASCII UCS-символ, всегда находится в диапазоне от 0xc0 до  0xfd  и указывает,  какой длины эта последовательность. Все последующие байты
         в многобайтовой последовательности находятся в диапазоне от  0x80  до
         0xbf.     Это    обеспечивает   легкую   ресинхронизацию,   устраняет
         необходимость учитывать состояние входного потока  (statelessness)  и
         делает кодировку устойчивой к пропущенным байтам.

       * Символы  UCS,  закодированные  в  UTF-8,  могут  быть до шести байт в
         длину, тогда как символы Unicode могут иметь длину лишь до трех байт.
         Так  как  Linux  использует только 16-битное подмножество UCS -- Uni-
         code, то под Linux многобайтовые последовательности UTF-8 могут  быть
         одно-, двух- или трехбайтными.

КОДИРОВКА
       Нижеследующие  последовательности  байт  используются для представления
       символов.  Конкретная используемая последовательность зависит от номера
       символа в кодировке UCS:

       0x00000000 - 0x0000007F:
           0xxxxxxx

       0x00000080 - 0x000007FF:
           110xxxxx 10xxxxxx

       0x00000800 - 0x0000FFFF:
           1110xxxx 10xxxxxx 10xxxxxx

       0x00010000 - 0x001FFFFF:
           11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x00200000 - 0x03FFFFFF:
           111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x04000000 - 0x7FFFFFFF:
           1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       Позиции  битов,  обозначенные  как  xxx,  заполняются  соответствующими
       битами  из  кода  символа  в   бинарном   представлении.   Используется
       кратчайшая  из  возможных  многобайтовых  последовательностей,  которые
       могут представить код символа.

ПРИМЕРЫ
       Символ Unicode с кодом 0xa9 = 1010 1001 (знак copyright)  кодируется  в
       UTF-8 как

              11000010 10101001 = 0xc2 0xa9

       а  символ  с  кодом  0x2260  =  0010  0010  0110 0000 (знак "не равно")
       кодируется так:

              11100010 10001001 10100000 = 0xe2 0x89 0xa0

БЕЗОПАСНОСТЬ
       Спецификация  Unicode  требует,  чтобы  при  записи  файлов   в   UTF-8
       использовалась  самая  короткая  из  возможных  форма записи; например,
       двухбайтная последовательность с первым байтом  0xc0  не  соответствует
       стандарту.   Был  также  опубликован  "UTF-8  Corrigendum"  (поправка к
       стандарту), в котором программам запрещается принимать входные данные с
       не  самыми  короткими  формами  записи.   Это  сделано  из  соображений
       безопасности: если входные  данные  проверяются  на  предмет  возможных
       нарушений   безопасности,   то   программа   может   проверять   только
       ASCII-версию последовательностей типа "/../", ";" или NUL, и  при  этом
       упустить  из  виду, что есть множество не соответствующих ASCII методов
       представить такие последовательности.  См. также IETF RFC 2279.

       Однако, некоторые  системы  (использующие  NUL  для  завершения  строк)
       используют C0 80 для внутреннего представления NUL (ASCII 00).

СТАНДАРТЫ
       ISO 10646, Unicode 1.1, XPG4, Plan 9.

АВТОР
       Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

СМОТРИ ТАКЖЕ
       unicode(7)

ПЕРЕВОД
       Перевел с английского Алексей Миллер <asm@asm.kiev.ua> 2000

mono ★★★★★
()
Ответ на: Кто такой utf-8? от Camel

Такой utf-8.

> Оъясните мне, кто такой utf-8? Я всегда думал что UTF'ы начинаются с 16.

Слив засчитан.

Camel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.