.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" Copyright (C) Markus Kuhn, 1996 .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" .\" 1995-11-26 Markus Kuhn .\" First version written .\" .\" Вычитано и скорректировано by Alexey Mahotkin .\" для проекта http://alexm.here.ru/manpages-ru/ .\" .TH UTF-8 7 "26 ноября 1995" "Linux" "Руководство программиста Linux" .SH НАИМЕНОВАНИЕ UTF-8 \- ASCII-совместимая многобайтная кодировка Unicode .SH ОПИСАНИЕ Набор символов .B Unicode покрывает 16-битное пространство кодов. Наиболее очевидная кодировка Unicode, известная как .BR UCS-2 , содержит последовательности 16-битных слов. Такие строки могут содержать комбинации символов (например '\\0' или '/'), которые имеют специальное значение в именах файлов и других параметрах функций из библиотеки языка C. Кроме того, большинство утилит UNIX предназначены для обработки ASCII-файлов, и не могут читать 16-битные символы без специальной модификации. По этим причинам .B UCS-2 является неподходящей кодировкой .B Unicode в именах файлов, текстовых файлах, переменных окружения и т.\ д. Стандарт .BR "ISO 10646 Universal Character Set (UCS)" , являющийся надмножеством Unicode, покрывает уже 31-битное пространство кодов, а используемая для него очевидная кодировка .B UCS-4 (последовательность 32-битных слов) имеет те же проблемы. Кодировка .B Unicode и .B UCS под названием .B UTF-8 лишена этих недостатков и являются наиболее подходящей для использования набора символов .B Unicode в Unix-подобных операционных системах. .SH СВОЙСТВА Кодировка .B UTF-8 обладает следующими привлекательными свойствами: .TP 0.2i * .BR UCS "-символы" с кодами от 0x00000000 до 0x0000007f (классические символы из набора .B US-ASCII ) кодируются как байты с кодами 0x00 до 0x7f (совместимость с кодовой таблицей ASCII). Это означает, что файлы и строки, содержащие только 7-битные ASCII символы, будут иметь одинаковое представление как в .BR ASCII , так и в .BR UTF-8 . .TP * Все .BR UCS "-символы" с кодами > 0x7f кодируются как многобайтовые последовательности, содержащие только байты в диапазоне от 0x80 до 0xfd, так что ASCII байты не окажутся частью другого символа и, как следствие, не будет проблем с использованием '\\0' or '/'. .TP * Сохраняется лексикографический порядок сортировки строк кодировки .BR UCS-4 . .TP * При помощи .BR UTF-8 могут быть закодированы все возможные 2^31 кодов .BR UCS . .TP * В кодировке .B UTF-8 никогда не используются байты с кодами 0xfe и 0xff. .TP * Первый байт многобайтовой последовательности, представляющей один не-ASCII .BR UCS "-символ," всегда находится в диапазоне от 0xc0 до 0xfd и указывает, какой длины эта последовательность. Все последующие байты в многобайтовой последовательности находятся в диапазоне от 0x80 до 0xbf. Это обеспечивает легкую ресинхронизацию, устраняет необходимость учитывать состояние входного потока (statelessness) и делает кодировку устойчивой к пропущенным байтам. .TP * Символы .BR UCS , закодированные в .BR UTF-8 , могут быть до шести байт в длину, тогда как символы .B Unicode могут иметь длину лишь до трех байт. Так как Linux использует только 16-битное подмножество .BR UCS " --" .BR Unicode , то под Linux многобайтовые последовательности .B UTF-8 могут быть одно-, двух- или трехбайтными. .SH КОДИРОВКА Нижеследующие последовательности байт используются для представления символов. Конкретная используемая последовательность зависит от номера символа в кодировке UCS: .TP 0.4i 0x00000000 - 0x0000007F: .RI 0 xxxxxxx .TP 0x00000080 - 0x000007FF: .RI 110 xxxxx .RI 10 xxxxxx .TP 0x00000800 - 0x0000FFFF: .RI 1110 xxxx .RI 10 xxxxxx .RI 10 xxxxxx .TP 0x00010000 - 0x001FFFFF: .RI 11110 xxx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .TP 0x00200000 - 0x03FFFFFF: .RI 111110 xx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .TP 0x04000000 - 0x7FFFFFFF: .RI 1111110 x .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .RI 10 xxxxxx .PP Позиции битов, обозначенные как .IR xxx , заполняются соответствующими битами из кода символа в бинарном представлении. Используется кратчайшая из возможных многобайтовых последовательностей, которые могут представить код символа. .SH ПРИМЕРЫ Символ .B Unicode с кодом 0xa9 = 1010 1001 (знак copyright) кодируется в UTF-8 как .PP .RS 11000010 10101001 = 0xc2 0xa9 .RE .PP а символ с кодом 0x2260 = 0010 0010 0110 0000 (знак "не равно") кодируется так: .PP .RS 11100010 10001001 10100000 = 0xe2 0x89 0xa0 .RE .SH БЕЗОПАСНОСТЬ Спецификация Unicode требует, чтобы при записи файлов в UTF-8 использовалась самая короткая из возможных форма записи; например, двухбайтная последовательность с первым байтом 0xc0 не соответствует стандарту. Был также опубликован "UTF-8 Corrigendum" (поправка к стандарту), в котором программам запрещается принимать входные данные с не самыми короткими формами записи. Это сделано из соображений безопасности: если входные данные проверяются на предмет возможных нарушений безопасности, то программа может проверять только ASCII-версию последовательностей типа "/../", ";" или NUL, и при этом упустить из виду, что есть множество не соответствующих ASCII методов представить такие последовательности. См. также IETF RFC 2279. .PP Однако, некоторые системы (использующие NUL для завершения строк) используют C0 80 для внутреннего представления NUL (ASCII 00). .RE .SH СТАНДАРТЫ ISO 10646, Unicode 1.1, XPG4, Plan 9. .SH АВТОР Markus Kuhn .SH СМОТРИ ТАКЖЕ .B unicode(7) .RE .SH ПЕРЕВОД Перевел с английского Алексей Миллер 2000