GCC и локали
От: Аноним  
Дата: 12.08.08 09:00
Оценка: +1
Привет!

Использую MingW 5.1.4 (gcc 3.4.5-20060117) и наблюдаю большую проблему с локалями. К примеру, даже нижеприведенный такой тестовый код выдает исключением bad_cast, при попытке использовать use_facet. Этот же код, откомпилированный под Linux 4-ым gcc, работает превосходно, равно как и откомпилированный с помощью MS Visual C++ Toolkit 2003.

#include <string>
#include <iostream>

using namespace std;

std::wstring string2wstring(const std::string &source,
  std::locale const &loc) {
    wstring result(source.size(), wchar_t());
    try {
        const ctype<wchar_t>& ct = use_facet<ctype<wchar_t> >(loc);
        wstring::iterator dest(result.begin());
        string::const_iterator it(source.begin());
        string::const_iterator end(source.end());
        for (; it != end; ++it, ++dest)
            *dest = ct.widen(*it);
        return result;
    }
    catch(bad_cast &b) {
        cerr << "Error on cast: " << b.what() << endl;
        return L"";
    }
}

int main(int argc, char* argv[]) {
    if (argc > 1) {
        string s = argv[1];
        cout << "string: " << s << endl;
        cout << "string length: " << s.length() << endl;
        wstring w = string2wstring(s, locale::classic());
        cout << "wstring length: " << w.length() << endl;
    }
    return 0;
}


Кроме того, локали отличные от classic — не поддерживаются в этом MingW, что создает мне большие проблемы :/

Вопросы:
1. Не появились ли в новой экспериментальной версии MingW поддержка локалей?
2. Не озаботился ли кто добавлением локалей в существующую стабильную версию MingW?
3. Имеет ли смысл попробовать STLPort в качестве замены MingW'шного STL, как там с локалями и вообще, в целом?
4. Если все безнадежно, натолкните на документ по разработке-добавлению собственных классов локалей.
Re: GCC и локали
От: Vain Россия google.ru
Дата: 12.08.08 09:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Использую MingW 5.1.4 (gcc 3.4.5-20060117) и наблюдаю большую проблему с локалями. К примеру, даже нижеприведенный

Cygwin пробовал?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: GCC и локали
От: Аноним  
Дата: 12.08.08 10:50
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


А>>Использую MingW 5.1.4 (gcc 3.4.5-20060117) и наблюдаю большую проблему с локалями. К примеру, даже нижеприведенный

V>Cygwin пробовал?
Нет, Cygwin не пробовал, т.к. он своими зависимостями от своих .DLL немного не подходит, но тем не менее, имеет смысл попробовать, спасибо за напоминание о его существовании
Re[2]: GCC и локали
От: Аноним  
Дата: 12.08.08 11:22
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


А>>Использую MingW 5.1.4 (gcc 3.4.5-20060117) и наблюдаю большую проблему с локалями. К примеру, даже нижеприведенный

V>Cygwin пробовал?

ё-моё, 21 век...

#include <wstring>


$ g++ test.cpp
test.cpp:2:19: wstring: No such file or directory

Из http://ru.wikipedia.org/wiki/Cygwin :
"К сожалению, Cygwin не имеет поддержки Unicode; отсутствует также и поддержка каких-либо кодировок, отличных от родных для Windows и OEM"

кроме того: "Для распространения коммерческих программ, использующих библиотеку Cygwin, необходимо приобретение лицензии у RedHat" :/

Так что Cygwin отправляется в топку.
Re[3]: GCC и локали
От: Аноним  
Дата: 12.08.08 11:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>#include <wstring>

С этим я, конечно, переборщил, но wstring в string.h, действительно, не объявлен.
Re[3]: GCC и локали
От: Аноним  
Дата: 12.08.08 12:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>кроме того: "Для распространения коммерческих программ, использующих библиотеку Cygwin, необходимо приобретение лицензии у RedHat" :/

-mno-cygwin пробовали?
Re: GCC и локали
От: Tonal- Россия www.promsoft.ru
Дата: 12.08.08 12:56
Оценка:
Здравствуйте, <Аноним>, Вы писали:
А>Вопросы:
А>3. Имеет ли смысл попробовать STLPort в качестве замены MingW'шного STL, как там с локалями и вообще, в целом?
Если я правильно помню, то именно туда mingw-шники и отсылают.
... << RSDN@Home 1.2.0 alpha 4 rev. 1065>>
Re: GCC и локали
От: Аноним  
Дата: 19.08.08 16:20
Оценка:
А>Вопросы:
А>1. Не появились ли в новой экспериментальной версии MingW поддержка локалей?
Попробовал mingw 4.2.1. Откомпилировалось без вопросов. И даже вроже работает.

А>2. Не озаботился ли кто добавлением локалей в существующую стабильную версию MingW?



А>3. Имеет ли смысл попробовать STLPort в качестве замены MingW'шного STL, как там с локалями и вообще, в целом?

Знаю, что они там есть. Последний раз STLPort пробовал очень давно... Так что

А>4. Если все безнадежно, натолкните на документ по разработке-добавлению собственных классов локалей.



Вот что удивляет, почему-то
wcout << "wstring: " << w << endl;

ничего не выводит. Причем, если не изменяет память, и под Linux тоже...
Re: GCC и локали
От: Аноним  
Дата: 21.08.08 14:40
Оценка:
А>Использую MingW 5.1.4 (gcc 3.4.5-20060117) и наблюдаю большую проблему с локалями.

Если кому интересно, то оказалось, что в экспериментальной версии MinGW (gcc.exe (GCC) 4.3.0 20080305 (alpha-testing) mingw-20080502) эта проблема решена.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.