![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хм. А как определить - Unicode, UTF-8 или ANSI? [D7, WinXP]
Задумавшийся © (2005-12-03 20:22:00)Здравствуйте. Есть файл (plain-text) FileName, как опеределить содержимое какого типа в нем находится - Unicode, UTF-8 или ANSI? Спасибо.
Задумавшийся (2005-12-04 00:45:00) [1]Сделал, работает, спасибо.
Задумавшийся (2005-12-03 21:55:00) [2]2 Anatoly Podgoretsky
Да, к тому моменту, когда писал пост, еще не особо осознавал :). Теперь понимаю, что "Юникод" в моем прошлом понимании на самом деле есть UTF-16.
Anatoly Podgoretsky (2005-12-03 21:50:00) [3]Задумавшийся (03.12.05 20:52) [1]
Ты не путаешь Юникод и UTF
Задумавшийся (2005-12-03 21:30:00) [4]Спасибо, конечно, но оттуда же:
Requirements
Windows NT/2000/XP/Vista: Included in Windows NT 3.5 and later.
Windows 95/98/Me: Unsupported.
Критично...
> видимо, далеко не всегда используется, ибо:
Да, насколько я понял это т.н "сигнатура Unicode", где то вставляется, где то нет. Но как раз это не критично, 100% точность определения не требуется.
Piter (2005-12-03 21:16:00) [5]http://ah054.scut.ru/
Задумавшийся (03.12.05 20:52) [1]
Для указания кодировки текста в Юникоде используется соглашение
видимо, далеко не всегда используется, ибо:
"The IsTextUnicode function determines whether a buffer is likely to contain a form of Unicode text. The function uses various statistical and deterministic methods to make its determination, under the control of flags passed via lpi"
Задумавшийся (2005-12-03 20:52:00) [6]Откопал интересный текст. Теперь проблема технического плана - как считать эти байти и определить?
Для указания кодировки текста в Юникоде используется соглашение, по которому в начале текста записывается символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый меткой порядка байтов (англ. Byte Order Mark, BOM). Поскольку символа U+FFFE не существует, это позволяет определить кодировку текста. Документы, следующие этой конвенции начинаются с такой последовательности байтов:
UTF-8
EF BB BF
UTF-16BE
FE FF
UTF-16LE
FF FE
UTF-32BE
00 00 FE FF
UTF-32LE
FF FE 00 00
К сожалению, эта мера не даёт возможности различать UTF-16LE и UTF-32LE, поскольку U+0000 является легальным символом (хотя реальные тексты редко начинаются с него).