Case sensitive для русских букв в функции GetPrivateProfileString.

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Обнаружил, что функция чтения из ini-файла GetPrivateProfileString (а также другие функции из этой "области": GetPrivateProfileSection etc.) "плохо" переносят, если указать имя секции / имя ключа, содержащих русские буквы не в том регистре (т.е. строчные/прописные), как они указаны в INI-файле.
С латинскими буквами все отрабатывает отлично.
То есть, получается, что при работе этих функция имена секции/ключа для латинских букв - case insensitive, а для русских - case sensitive.

Конечно, это можно "обойти", если при использовании программы принять соглашение, что все русские имена секций/ключей следует писать в INI-файле (и обращаться к ним из программы), используя ТОЛЬКО заглавные буквы.
Но, хотелось бы, если это возможно, все-таки, избежать этого ограничения.

Интересно, это как-нибудь "лечится"? То есть, может надо "подкрутить" какие-то "национальные настройки" в Windows?

Данные о рабочей станции: Win2000, SP4, русская.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Функция lstrcmpi() использует текущую системную локаль, и работать вроде должна. Проблема может быть в том, что они по недосмотру используют функции из C Runtime, которые работают только для символов 32-127, а для всех других применяют бинарное сравнение.
2B OR NOT(2B) = FF
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Absurd, так в том-то и дело, что интересно было бы использовать функции GetPrivateProfile.... Функции-то, в принципе, удобные. Не самому ж парсить INI-шку... :( То есть, можно, конечено, но опять получится "изобретение велосипеда" :(
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

BBB писал(а):Absurd, так в том-то и дело, что интересно было бы использовать функции GetPrivateProfile.... Функции-то, в принципе, удобные. Не самому ж парсить INI-шку... :( То есть, можно, конечено, но опять получится "изобретение велосипеда" :(
Не такое уж и сложное дело.
PS: Хотя на униксах вообще и в Джаве в частности используются case-sensitive ключи в конфигах.
2B OR NOT(2B) = FF
Ответить