Jump to content
Восточное Дегунино

Текстовые файлы и кодировка


Denis

892 views

Текстовый файл — простейший тип. Традиционно каждый байт такого файла кодирует один символ из набора ASCII. Грубо говоря, один байт — один знак. Такой тип файлов не содержит ничего, кроме текста! В этом легко убедиться, открыв текстовый файл в HEX-редакторе.

Однако 8-битной кодировки явно недостаточно для обозначения всех символов всех алфавитов. Точнее, закодировать можно, но нужно прямо оговаривать кодовую страницу — символам какого алфавита соответствуют 8битные коды в данном случае. Например, если текст сохранен в кодовой странице DOS866, а вы открываете его в Блокноте, который работает с кодовой страницей Win1251, вместо русских букв вы увидите «крякозябры».

В последнее время нормой стала кодировка Unicode, в которой для хранения одного символа используется 4 байта (32 бита). Программам не надо «думать» о кодовых страницах — набора Unicode с избытком хватит для кодирования всех живых и мертвых алфавитов. Так появились текстовые файлы в кодировке Unicode: четыре байта — один знак.

Разные представления Unicode отличаются числом битов, задействованных в кодировании символа (UTF-8, UTF-16, UTF-32), а также порядком байтов: big endian (BE) — старший байт записан перед младшим, little endian (LE) — обратный порядок. Для относительной совместимости со старыми ОС и программами применяется такое представление кодировки Unicode, как UTF-8. В тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Блокнот Windows 7 позволяет сохранять текстовые файлы в одной из четырех кодировок на выбор.

Текстовые файлы в кодировке Unicode UTF-8 содержат в самом начале последовательность EF BB BF. Это метка порядка байтов (Byte Order Mark, BOM), иначе называемая сигнатурой файла UTF-8.

Если файл сохранен в других представлениях Unicode, и сигнатуры будут другими:

  • UTF-16BE — FE FF; 
  • UTF-16LE — FF FE; 
  • UTF-32BE — 00 00 FE FF; 
  • UTF-32LE — FF FE 00 00. 

Благодаря сигнатурам программы при открытии таких файлов правильно интерпретируют значения последующих байтов. Если же сигнатуры нет, это файл либо в 8битной кодировке, либо в UTF-16BE или UTF-32BE.

0 Comments


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...