Как известно, одной из отличительных черт нового пакета Office 97 (вернее, всех программ нового поколения по Windows 95/NT) является замена традиционной однобайтовой кодировки символов на двухбайтовую систему UNICODE. Такой переход, естественно, создает определенные проблемы, которые проявляются порой довольно неожиданным образом. В этой связи представляется целесообразным поделиться небольшим опытом, который может оказаться полезным для читателей.

 

Пример с Word 97

 

Выполним следующий пример (работа выполнялась в локализованном Word 6.0 и английском Word 97):

 

1. В Word 6 создадим документ на русском языке. Например, запишем одну фразу:

 

Привет участникам соревнований!

 

Запомним этот документ в двух разных форматах  -  Word 6 и RTF (например, в файлах с именами TEST6.DOC и TEST6.RTF).

 

2. Теперь загрузим Word 97 и прочитаем файл TEST6.DOC. Мы увидим нормальный русский текст. Если выполнить следующие операции: выделить этот фрагмент и скопировать его в буфер обмена, а затем создать новый документ (File/New) и вставить в него исходный текст, то мы увидим такую запись:

 

Привет участникам соревнований!

 

Комментарий. Ситуация понятна: коды символов остались теми же самыми, но русский шрифт поменялся на стандартный американский. Точнее, кодовая таблица поменялась с 866 на 437/850 (т. е. используется не русская часть шрифта для верхней половины кодовой таблицы, а многоязычная латинская).

 

При работе с Word 6.0 эта проблема решалась просто: надо было выделить текст и поставить ему в соответствие какой-то шрифт кириллицы, например “Times New Roman” заменить на “Times New Roman Cyr”. Но в Word 97 выбор шрифта производится автоматически в зависимости от кода символов (UNICODE).

 

3. Запомним новый файл в четырех форматах:

 

TEST97.DOC, TEST97.RTF, TEST97.TXT, TEST97d.TXT (text MS-DOS)

 

4. Открыв первые два файла, мы убедимся, что текст сохранился в том же нечитаемом виде. Любопытен еще один момент: если посмотреть на содержание TEST97.DOC в режиме двоичного просмотра, то можно увидеть, что сам текст сохранен в старой однобайтовой кодировке, а не в UNICODE!

 

5. Теперь посмотрим два текстовых файла (TXT)  -  и в том и в другом увидим одну и ту же строку:

 

I?eaao o?anoieeai ni?aaiiaaiee!

 

Ситуация довольно любопытна: было выполнено сохранение текста с одновременным транслитерным преобразованием специфических европейских символов в стандартные латинские. Например, все символы “a” (с крышкой, с точкой и пр.) стали просто “a”.

 

6. Еще один интересный момент: если, выполняя п. 2, загрузить не TEST6.DOC, а TEST6.RTF (созданный в WORD 6), то не будет никаких проблем с копированием русских букв через буфер обмена.

 

Выводы. Описанная выше ситуация, конечно, не представляет особых трудностей на практике. Достаточно, например, сразу после загрузки документа Word 6 запомнить его в формате Word 97 и продолжать с ним работу. Но этот пример показывает, что проблема преобразования документов из старого формата в новый (особенно с русским текстом), как говорится, имеет место быть. Для иллюстрации можно привести еще один реальный пример.

 

Пример с электронной почтой

 

Некоторое время назад я получил по электронной почте письмо от своей знакомой, которое состояло из двух частей (входящих в один файл), примерно такого содержания:

 

Андрей! Посылаю тебе копию письма, пришедшего ко мне неделю назад...

 

Далее шел текст копии в таком виде:

 

Oaa?aaiay ainii?a...

 

Кодировка второй части сразу напомнила проблему, описанную выше в п. 5. В результате общения по телефону с моим адресантом мы выяснили причину данной ситуации. Некоторое время назад эта моя знакомая получила с помощью Exchange 4.0 письмо, которое начиналось со слов Уважаемая госпожа.... Буквально через несколько дней у них в офисе заменили почтовую систему на Exchange 5.0. С ее помощью она в режиме “Переслать” (Forward) переправила мне это письмо со своей припиской. Самое интересное здесь то, что в своем окне редактора Exchange моя приятельница видела нормальный русский текст и в отправляемой копии, и в собственном сообщении. А при пересылке письма произошло описанное выше искажение, которого отправительница уже не могла увидеть. Наверное, такая ситуация возникла потому, что для нового и старого русского текста из-за проблемы смены версий системы использовалась разная внутренняя кодировка.

 

К сожалению, проблемы с национальными языками, острота которых в последнее время вроде бы спала, похоже, опять становятся актуальными. Но теперь это в значительной степени связано с переходом к UNICODE. Не способствует их решению и довольно частая смена форматов файлов в офисных пакетах Microsoft.

 

Андрей Колесов

Версия для печати