Alter.Org.UA
 << Back Home EN en   Donate Donate

cp866u patch for ukrainian 'i' in console applications (NT4/w2k/XP)

by savaX@inserv.kiev.ua (remove X)

Известная проблема - Windows плохо дружит с украинскими буквами 'I', 'i'. Файлы, содержащие в именах эти буквы отображаются неправильно, со знаками вопроса ('?'). И что наиболее неприятно - не копируются из консольных фйловых менеджеров, таких как Far. Вот архив с патчем:
cp866u.rar
Коментарии по установке см. ниже
А вот коментарии автора (взято из readme.txt):

Хотел бы обратить Ваше внимание на недостаток Windows. Когда создавали локализированные таблицы для OEM украинские символы забыли, и затем вставили в 866 таблицу. Отсутствие стандартизации в этой области привело к тому, что появилось несколько таблиц, отличавшихся положением нескольких символов специфичных для украинского алфавита. После создания 1251 таблицы положение улучшилось, поскольку она имела украинские символы. Тоже можно сказать и о таблице Unicode. Однако возникла проблема с символами имеющими следующие коды:
cp1251Unicode
0xB20x0406
0xB30x0456
Это украинские буквы (I) и (i). В таблицах 866 как для Windows NT 4.0, W2k, так и для Windows 9x отсутствуют коды для этих символов. Поэтому при выполнении функций AnsiToOem и OemToAnsi, а также некоторых других использующих таблицу 866 символ заменяется на ? или _ в зависимости от системы. В результате все программы выполняющие по тем или иным причинам перекодировку работают неправильно. При работе с текстом особых проблем кроме неудобств не возникает. Однако MSOffice любит создавать названия файлов из первой строки файла, кроме того заставить пользователей не использовать неправильных символов в названиях практически невозможно. Вот лишь небольшой перечень проблем возникающих в результате использования файлов с названиями содержащими неизвестный системе символ:
    1. При переписывании файла с NTFS раздела на FAT или наоборот;
    2. При использовании программ архивации работающих в DOS окне или пакетном режиме (любая програма работающая в DOS производит перекодировку для вывода);
    3. При использовании NC like commander (например популярный сейчас FAR).
    4. При использовании баз данных с информацией в OEM кодировке (например 1С бухгалтерия использует файлы в формате DBASE).
Конечно можно не пользоваться всеми этими программами, но я лично люблю Far и архиватор Jar, да и другие пакетные программы. Мне удалось решить эту проблему в Windows NT путем изменения 866 таблицы:
cp866 Unicode oldUnicode new
0xF60x040E 0x0406
0xF70x045E 0x0456
Теперь совет:
Воспользоваться патчем который прилагается. После этого будет работать все. Ну и конечно после каждой установки Service Pack ставить патч.
P.S. Прилагаемая программа extmove.exe позволяет копировать файлы защищенные от записи.
Адрес для контакта: savaX@inserv.kiev.ua (remove X)

Комментарии по установке
from alterX@alter.org.ua (remove X):

  • Распаковать cp866u.rar и запустить setup.bat, после чего перезагрузить машину.
  • Запускать нужно с того раздела, на котором находится каталог WINNT (для NT4/w2k) или WINDOWS (для XP). Это требование связано с тем, что программа extmove.exe, использующаяся при установке, в действительности добавляет пути к указанным файлам в специальный список в Registry, а при перезагрузке Windows самостоятельно перепишет их в нужное место. Во время загрузки гарантируется доступность только того раздела, на котором находится сама Windows.
  • Сразу после исполнения setup.bat может исчезнуть индикатор раскладок. В этом случае после перезагрузки необходимо зайти в Control Panel->Keyboard->Input Locales и заново добавить русскую и/или украинскую раскладку.

Пользователям Far'а рекомендую также патчик для таблиц перекодировки koi8-u и cp1251. Детальнее с ним можно ознакомиться здесь.
Для любителей есть еще смешаная русско-украинская раскладка, содержащая все буквы обоих алфавитов. А для тех, у кого стоит английская Винда, а кирилица упорно показывается вопросиками ('?'), рекомендуется почитать HOWTO по включению кирилицы в Windows NT/2000/XP.

Note: такая же проблема существует и в эмуляторе среды Windows под Linux - Wine.

См. также


Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2024