2

文字列と幅の広い文字列に関連する多くの質問があることがわかります。しかし、私が探している情報を提供してくれる人はいないので、新しい質問を投稿しています。

私はこのコードを持っています...

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が表示されます(中央の2行が正しく印刷されないことに注意してください)

vikrant
.A0A(-----6
.A0A(
मुरुगन-----18

私のAppleラップトップとFreeBSD(ssh経由)ボックスの1つでは、w_*コードからo/pを取得できません。最初と最後の cout を実行するだけです vikrant मुरुगन-----18

私の理解では、指定されていない場合、これらの文字列は UTF 8 として扱われ、string で処理できる場合は wstring も処理されます。そのアプローチに何か問題がありますか?アドオンに関するいくつかの質問は... 単なる表示上の問題ですか? または wstring は Linux では信頼できませんか? 追加情報も役立つ場合があります。

4

1 に答える 1

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] << " ";
    }
}
于 2014-03-18T09:23:17.637 に答える