Я вижу, что есть много вопросов, связанных со строками и широкими строками. Но так как никто из них не дает мне информацию, которую я ищу … Я пишу новый вопрос.
У меня есть этот код …
std::string myName("vikrant");
std::cout<<myName<<std::endl;
std::wstring myNameHindi = L"मुरुगन";
std::wcout<<myNameHindi<<"-----"<<myNameHindi.size()<<std::endl;
std::wcout<<L"मुरुगन"<<std::endl;
std::string myNameHindiS = "मुरुगन";
std::cout<<myNameHindiS<<"-----"<<myNameHindiS.size()<<std::endl;
когда я компилирую & запустить этот код на моем окне RHEL (… (подключен через ssh, работает gcc 4.1.2), я получаю это o / p (обратите внимание, две средние строки не печатаются должным образом)
vikrant
.A0A(-----6
.A0A(
मुरुगन-----18
В то время как на моем ноутбуке с Apple и на одной из коробок FreeBSD (через ssh) я не получаю o / p из кода w_ *. Я только что получил первый и последний казнь
Vikrant
मुरुगन —— 18
Насколько я понимаю, что если не указано, эти строки будут обрабатываться как UTF 8. и если строка может обрабатывать это, wstring будет обрабатывать также. Что-то не так в этом подходе?
Некоторые дополнительные вопросы …
это просто проблема с дисплеем? или wstring не надежен на Linux?
Любая дополнительная информация может также помочь.
САМЫЙ ПРОСТОЙ СПОСОБ
Вот что вы ищете, #include <clocale>
и, например, чтобы иметь турецкий, просто введите setlocale(LC_ALL,"Turkish");
к вашему коду.
Вы также можете просто оставить его как setlocale(LC_ALL,"");
он будет использовать ваш местный язык.
#include <iostream>
#include <clocale>
int main(){
setlocale(LC_ALL,"Turkish");
std::cout << "I can type any Turkish character like ÖöÇ窺İiĞğÜüİ, anything.\n" << std::endl;
system("pause");
return 0;
}
НЕКОТОРЫЙ ДРУГОЙ ПУТИ
Это действительно странный способ сделать это, но это также сработает.
#include <iostream>
int main()
{
std::string characters="IiĞğÇçÜüŞşÖö";
int i;
for ( i=0; i<characters.length(); ++i ){
characters[i]=(characters[i]==-2) ? 159:characters[i]; //ş
characters[i]=(characters[i]==-3) ? 141:characters[i]; //ı
characters[i]=(characters[i]==-4) ? 129:characters[i]; //ü
characters[i]=(characters[i]==-10) ? 148:characters[i]; //ö
characters[i]=(characters[i]==-16) ? 167:characters[i]; //ğ
characters[i]=(characters[i]==-25) ? 135:characters[i]; //ç
characters[i]=(characters[i]==-34) ? 158:characters[i]; //Ş
characters[i]=(characters[i]==-35) ? 152:characters[i]; //İ
characters[i]=(characters[i]==-36) ? 154:characters[i]; //Ü
characters[i]=(characters[i]==-42) ? 153:characters[i]; //Ö
characters[i]=(characters[i]==-48) ? 166:characters[i]; //Ğ
characters[i]=(characters[i]==-57) ? 128:characters[i]; //Ç
std::cout << characters[i] << " ";
}
}
Других решений пока нет …