В Windows Vista произошёл пренеприятнейший баг, который привёл к неработоспособности некоторых клавиатурных раскладок в ANSI приложениях. Это удивительно (в печальном смысле этого слова), потому что этот баг умудрился пройти через дюжину тестов, которые мы делаем, чтобы такие вещи не происходили.
В любом случае, клавиатуры, связанные с указанными ниже локалями, могут иметь проблему для некоторых своих символов (я сделал этот список быстрым анализом и он может быть не полностью точен):
- Romanian (Romania)
- Ukrainian (Ukraine)
- Serbian (Latin, Bosnia and Herzegovina)
- Urdu (Islamic Republic of Pakistan)
- Belarusian (Belarus)
- Persian
- Azeri (Latin, Azerbaijan)
- Uzbek (Latin, Uzbekistan)
- Welsh (United Kingdom)
- Turkmen (Turkmenistan)
- Irish (Ireland)
- Uighur (PRC)
- Upper Sorbian (Germany)
- Hausa (Latin, Nigeria)
- Yoruba (Nigeria)
- Dari (Afghanistan)
- Lower Sorbian (Germany)
- K'iche (Guatemala)
- Wolof (Senegal)
- Igbo (Nigeria)
- Chinese (Traditional, Hong Kong S.A.R.) (IME не подвержена этому багу)
- Kazakh (Kazakhstan)
- Maori (New Zealand)
- Pashto (Afghanistan)
- Maltese (Malta)
TLocaleSignature
для этих локалей (вы можете получить к ним доступ через LOCALE_FONTSIGNATURE
в GetLocaleInfoEx
, хотя Майкл указывает, что это название довольно запутывающе).Поля
IsCsbDefault
и IsCsbSupported
записи TLocaleSignature
некоторых локалей имеют неверную информацию в Vista, а код ANSI-клавиатур использует IsCsbDefault
, чтобы выяснить, на какую кодовую страницу производить проецирование символов. Предположительно, LOCALE_IDEFAULTANSICODEPAGE
был бы лучшим выбором в этом случае, но он не используется. В общем, мы не рекомендуем использовать TLocaleSignature
или TFontSignature
, поскольку они исторически были довольно неаккуратными и часто меняются между версиями системы.Мы работаем над исправлением этого бага, и я сообщу, когда исправление будет готово.
В качестве обходного пути: нам повезло, что в Vista появились пользовательские локали. Вы можете использовать класс .NET
CultureAndRegionInfoBuilder
, чтобы создать пользовательскую культуру с исправленой сигнатурой шрифта. Для тех локалей, что поставлялись вместе с XP, вы можете взять данные для локали из XP, или вы можете взять данные из другой локали, которая имеет то же самое значение LOCALE_IDEFAULTANSICODEPAGE
. После такого исправления, пользовательская локаль позволит данным загружаться корректно, а ваши клавиатуры снова будут работать в ANSI приложениях. Заметьте, что пользовательская локаль имеет приоритет над любой встроенной локалью, которую мы можем добавить в будущем, так что вам лучше бы убедиться, что вы удалили пользовательскую локаль перед обновлением системы или установкой патча.Любопытно, что этот баг был сообщён для приложения, которое маркирует себя как Unicode приложение. Мы обнаружили, что многие "Unicode приложения", на самом деле, не используют Unicode везде, и часто зависят от ANSI-ввода (в противном случае они бы не столкнулись с этим багом).
Надеюсь, эта информация была полезной.
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.