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 рабочих решений не нашел...