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

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

ua
Offline Offline

« : 31-01-2004 18:37 » 

Итак, следующий код не работает под Win9x, и работает в W2K. Я торможу или очередной глюк от Microsoft?
--------------------------------------------------------------------------------
#include <windows.h>
#include <clocale>
#include <cctype>

int WinMain(HINSTANCE inst, HINSTANCE prevInst, LPSTR cmdLine, int cmdShow)
{
  if (std::setlocale(LC_CTYPE, ".OCP")==NULL)
    MessageBox(NULL, "Cannot set locale!", "locale", MB_OK);
  char cu=std::toupper('б');
  if (cu!='Б')
    MessageBox(NULL, "ToUpper doesn't work properly!", "locale", MB_OK);
  return 0;
}
------------------------------------------------------------------------------------
P.S. Код набран в 866 кодовой странице. Которая выставлена как OEM Code Page.
P.P.S. В MSDN 2003 ничего на этот счет не нашел Жаль
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #1 : 31-01-2004 22:30 » 

Что то локаль у тебя странная - ".OCP". Локаль имеет такой формат: language[_territory[.codeset]][@modifier]
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ysv_
Помогающий

ua
Offline Offline

« Ответ #2 : 05-02-2004 15:17 » 

Вот вырезка мз MSDN'a:
---------------------------------------------------------------------------------------------
The following examples pertain to the LC_ALL category. Either of the strings ".OCP" and ".ACP" can be used in place of a code page number to specify use of the user-default OEM code page and user-default ANSI code page, respectively.

setlocale( LC_ALL, "" );
Sets the locale to the default, which is the user-default ANSI code page obtained from the operating system.

setlocale( LC_ALL, ".OCP" );
Explicitly sets the locale to the current OEM code page obtained from the operating system.

setlocale( LC_ALL, ".ACP" );
Sets the locale to the ANSI code page obtained from the operating system.
-----------------------------------------------------------------------------------------------
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #3 : 06-02-2004 08:22 » 

Попробуй "ru_RU.OCP"
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ysv_
Помогающий

ua
Offline Offline

« Ответ #4 : 11-02-2004 08:18 » 

Цитата

Попробуй "ru_RU.OCP"

Ошибка под W2K - неможет установить такую локаль.
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #5 : 11-02-2004 10:31 » 

Локаль в win работает совсем не по posix.  Ха-ха-ха
Тебе остается только рыться в MSDN.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ysv_
Помогающий

ua
Offline Offline

« Ответ #6 : 15-02-2004 21:16 » 

В том то и дело, что в MSDN, даже July 2003, есть упомянутая выше цитата. А еще утверждается что setlocale совместима с ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP. Так что я в очередной раз bad Быть такого не может.
Записан
NetRaider
Гость
« Ответ #7 : 16-02-2004 06:15 » 

А так ?
Код:

std{{locale loc)"Russian_Russia.1251":;
char ch = std{{toupper)'б', loc:;
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #8 : 16-02-2004 12:49 » 

Вот, наткнулся случайно - таблицы строк для языков и стран:
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
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ysv_
Помогающий

ua
Offline Offline

« Ответ #9 : 22-02-2004 22:48 » 

Цитата

А так ?
Код:

std::locale loc("Russian_Russia.1251");
char ch = std::toupper('б', loc);

В том то и дело, что для 1251 СР все работает. А мне нужно 866 CP. А Win9x бессовестно врет. Я говорю ставь .OCP (866 CP). Она говорит поставила. А фактически остается 1251 СР. Правда я обошел это своей функцией ToUpper. Но насколько я понял та же проблема была и автора 7zip. Он ее решил через переход к Unicode и своим функция работы со строками.
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #10 : 24-02-2004 08:41 » 

ysv_, все таки строка "OCP" ни чего не говорит о кодировке - попробуй 866, или cp866.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines