То, что отображается на экране как текст, фактически хранится в текстовом файле в виде последовательность числовых значений, которые будут преобразованы в видимые символы.
Кодировка — это соглашение, согласно которому каждому текстовому символу соответствует кодовая последовательность, позволяющая осуществить обратное соответствие к тому же текстовому символу.
Метка последовательности байт BOM (Byte Order Mark)
Текстовые файлы использующие кодировки UTF могут в первых байтах содержать метку BOM, которая точно устанавливает примененный способ кодирования. При отсутствии метки BOM распознать метод придется по косвенным признакам.
Длина последовательности BOM составляет от 2 до 4 байт в зависимости от вида кодировки из таблицы ниже (колонки 3-6 содержат отображение BOM при ошибочном выборе кодировок ISO-8859-1, KOI8-R, CP1251, CP866):
Code | BOM | ISO | KOI8-R | CP1251 | CP866 |
---|---|---|---|---|---|
UTF-8 | EF BB BF |  | О╩© | п»ї | я╗┐ |
UTF-16 (BE) | FE FF | þÿ | ЧЪ | юя | ■ |
UTF-16 (LE) | FF FE | ÿþ | ЪЧ | яю | ■ |
UTF-32 (BE) | 00 00 FE FF | ␀␀þÿ | ␀␀ЧЪ | ␀␀юя | ␀␀■ |
UTF-32 (LE) | FF FE 00 00 | ÿþ␀␀ | ЪЧ␀␀ | яю␀␀ | ■␀␀ |
Внутренний формат Windows — UTF-16 LE.
Внутренний формат Unix — UTF-8.
Стандарт Encoding Standard рекомендует применять UTF-8.
BOM других кодировок UTF-7, UTF-1, UTF-EBCDIC, SCSU, BOCU-1, GB-18030 описаны тут: //en.wikipedia.org/wiki/Byte_order_mark
Порядок байт BE/LE
Последовательность размещения в файле байт каждого utf-кода предполагает два способа:
- BE (big-endian) — старший байт завершает;
- LE (little-endian) — младший байт завершает.
Конец строки EOL
Завершение строки в текстовом файле отмечается специальной последовательностью, которая может включать символы
EOL | HEX | Char | Char | Comment |
---|---|---|---|---|
CR | 0A | \r | Macintosh | Возврат каретки (Carriage Return) |
LF | 0D | \n | Unix | Перевод строки (Line Feed) |
CRLF | 0A 0D | \n | Windows |
Правила написания серверного кода PHP и кроссплатформенные системы, как Git, ясно предписывают использовать в файлах LF (\n).
Кодирование символов
UTF-8
В кодировании UTF-8 используется код переменной длины от 1 до 4, в зависимости от диапазона:
code Range | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Comment |
---|---|---|---|---|---|
U+0000..U+007F | 0xxxxxxx | ASCII (128) | |||
U+0080..U+07FF | 110xxxxx | 10xxxxxx | (1920) | ||
U+0800..U+FFFF | 1110xxxx | 10xxxxxx | 10xxxxxx | (61440) | |
U+10000..U+10FFFF | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | (1048576) |
Источники
Маркер последовательности байтов //ru.wikipedia.org