Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: C++, utf8 string to wstring
цитата
06/08/10 в 15:56
 FXIX
OC: Ubuntu 10.04
locale: ru_RU.utf8

Нужно привести параметр командной строки к верхнему регистру. Параметр может быть кириллическим и передается в кодировке текущей локали.

Цитата:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main(int argc, char** argv)
{
std::locale::global(std::locale(""));
// 1 case
string s = argv[1];
wstring w(s.begin(), s.end());
wcout << w << endl;
transform(w.begin(), w.end(), w.begin(), (int(*)(int)) towupper);
wcout << w << endl;

// 2 case
w = L"тест";
wcout << w << endl;
transform(w.begin(), w.end(), w.begin(), (int(*)(int)) towupper);
wcout << w << endl;

return 0;
}


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

Цитата:

pixx@pixx:~$ locale
LANG=ru_RU.utf8
LANGUAGE=en
LC_CTYPE="ru_RU.utf8"
LC_NUMERIC="ru_RU.utf8"
LC_TIME="ru_RU.utf8"
LC_COLLATE="ru_RU.utf8"
LC_MONETARY="ru_RU.utf8"
LC_MESSAGES="ru_RU.utf8"
LC_PAPER="ru_RU.utf8"
LC_NAME="ru_RU.utf8"
LC_ADDRESS="ru_RU.utf8"
LC_TELEPHONE="ru_RU.utf8"
LC_MEASUREMENT="ru_RU.utf8"
LC_IDENTIFICATION="ru_RU.utf8"
LC_ALL=

pixx@pixx:~$ Workspace/test/Debug/test тест
????????
????????
тест
ТЕСТ


Вопрос: как сделать так, чтобы любую UTF-8 строку, полученную из параметра или файловой системы через readdir можно было привести в верхний регистр?

Кроме использования фреймворков типа Qt со встроенными средствами поддержки UTF8 рабочих решений не нашел...
цитата
06/08/10 в 19:00
 asgor
smail101.gif , как разберешься отпиши.


Эта страница в полной версии