Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Локаль в винде  (Прочитано 8614 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« : 25-01-2007 08:58 » 

Поднимаю старый вопрос: установка локали в винде.
По дефолту, она никакая. Точнее - ANSI.

MSDN по этому поводу:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_language_and_country_strings.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_CRT_Language_Strings.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_CRT_Country_Strings.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_code_pages.asp

Старая тема тут: https://forum.shelek.ru/index.php/topic,2329.0.html

Вартанты типа "russian_russia.1251" и им подобные не рулят.

Проверку делаю посредством isalpha().

В результате просто написал свою ф-ию с таблицей для 1251, но это не кошерно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 25-01-2007 13:14 » 

RXL, кошерно кошерно Улыбаюсь это по стандарту.
ключевое словосочетание char traits

Локаль нужна для чего?
первая часть(до точки) говорит как форматировать числа, даты и на каком языке
вторая часть говорит какая кодировка и нужно делать перекодирование перед выводом

isalpha и т.п. специфичны не столько для кодировки, сколько для языка
вот цифру на японском в одним иероглифом считать цифрой или буквой?
все языки не поддержишь, вот для этого и сделано char_traits ты сам определяешь правила по которым isalpha и прочие буду тебе говорить что за тип у символа.
Об этом написано у Эккеля и Мейерса(кажется)
Но я как всегда могу и ошибаться. Улыбаюсь)
Записан

Странно всё это....
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 25-01-2007 16:28 » 

LogRus, но русский то поддержать не сложно? Почему в Linux я задаю локаль и получаю корректный результат, а хваленая винда не может?
Кстати, что ты имеешь в виду "по стандарту"? Мое решение  Быть такого не может

Поправлю: isalpha() не говорит, что за тип - они лишь подтверждает или нет, что символ классифицирован как буква.

Мне нужно делать приложение лишь с поддержкой русского (внутрикорпоративное ПО) и я обошел траблу простым созданием таблицы классов символов и ф-ии, которая их возвращает.

Код:
int char_class(char c)
{
  static int class_map[256] =
    {
        // 0, 0, ..... 1, .... 2, ... 3. и т.п.
    };

  return class_map[0xff & c];
}

Просто и никаких заморочек на винду и STL (как ты намекаешь, если я правльно тебя понял).
Но, как говорится, осадок остался...

Меня в этой теме интересует именно, как правильно сказать винде, что программа работает с такой-то локалью. Пробовал определять LC_CTYPE и LC_ALL.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #3 : 25-01-2007 18:41 » 

В стандарте есть раздел где описано как должен работать isalpha и ему подобное в STL и т.п. раздел про локализацию. Там также описано, как создавать char_traits.
Про локаль сейчас посмотрю я писал тестовый проект с целью изучить этот вопрос даже что-то работало.
Записан

Странно всё это....
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #4 : 25-01-2007 18:55 » 

о чего нашел
http://msdn2.microsoft.com/en-gb/library/15tw7k0y(VS.80).aspx
http://msdn2.microsoft.com/en-gb/library/zt587566(VS.80).aspx
говорит в isalpha локаль отдать надо, но опять же stl
еще тут обсуждалось
http://www.rsdn.ru/Forum/?mid=970596
для C и C++ примеры есть
вот тут интересно
http://www.rsdn.ru/Forum/?mid=1854733
Записан

Странно всё это....
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 27-01-2007 10:25 » 

LogRus, спасибо за ссылки!
Я всегда был уверен, что в винде все через жопу...  Жаль
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #6 : 29-01-2007 05:48 » 

RXL, Улыбаюсь знаешь сколько народу готово с тобой не аргументированно поспорить Улыбаюсь))
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines