Александър Иванов
cream в режим „expert“
20. BOM (Byte Order Mark)
Ако не сте още погледнали Текстов файл, бинарен файл, разумно е сега да го погледнете — там обяснявам какво е BOM.
Когато обработвате текст с многобайтово кодиране в Unicode (UTF-32, UTF-16, UTF-8 и подобни), може да инструктирате vim/cream да записва в началото на файла маркер за реда на байтовете:
:set bomb
(Ама че шегаджии!)
Както и да го инструктирате да не го записва:
:set nobomb
За филолога е по-удобно да работи без този маркер в cream, защото, когато се използват външни програми (филтри), в първия ред на текста в начална позиция се появява <feff> или нещо подобно — тоест BOM се появява като низ и това пречи. Впрочем в съвременните сглобки на Linux се използва кодиране UTF-8 и също се препоръчва да не се използва BOM при записа на текстовите файлове: точно по тази причина — системните програми „не знаят“ да отстраняват при работата си BOM, нито да го възстановяват. Да се работи без BOM е възможно, защото кодирането UTF-8 е „саморазпознаващо се“ и не се нуждае задължително от маркер за реда на байтовете, но е допустим.
В Windows обаче нещата изглеждат малко по-другояче. Уиндоуските програми не разпознават текст, кодиран в UTF-8, ако няма BOM. Програмите с отворен код (като cream или популярния програмен редактор Notepad++) се справят с това без проблеми, но Windows го не умее.
Затова, ако работите текст с кодиране UTF-8 и искате да го изпратите на някое приятелче, за което знаете, че е под Windows, сложете му BOM и тогава го изпратете. Иначе ще го накарате да се мъчи като грешен дявол, за да го разчете.
Маркерът за поредност на байтовете (BOM) може да сложите в cream, както току-що описах. Ама и в питонската библиотека gtools.py (вижте glotta) аз съм предвидил функции за това.