Консольная печать строк и строк в переполнении стека

Я вижу, что есть много вопросов, связанных со строками и широкими строками. Но так как никто из них не дает мне информацию, которую я ищу … Я пишу новый вопрос.

У меня есть этот код …

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?
Любая дополнительная информация может также помочь.

2

Решение

САМЫЙ ПРОСТОЙ СПОСОБ

Вот что вы ищете, #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] << " ";
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]