控制台在C ++中打印字符串和wstring

时间:2014-03-18 08:55:26

标签: c++ c unicode portability widestring

我可以看到有许多与字符串和宽字符串有关的问题。但由于他们都没有给我提供我正在寻找的信息......我正在发布一个新问题。

我有这段代码......

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;

当我编译&amp;在我的RHEL框上运行此代码(...(通过ssh连接,运行gcc 4.1.2)我得到这个o / p(请注意中间的两行没有正确打印)

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

在我的苹果笔记本电脑和FreeBSD之一(通过ssh)框中,我没有从w_ *代码获得o / p。我刚刚获得第一个和最后一个cout执行     维克兰特     मुरुगन----- 18

我的理解是,如果没有指定,这些字符串将被视为UTF 8.如果字符串可以处理它,wstring也将处理。这种方法有什么问题吗? 一些插件问题是...... 它只是一个显示问题吗?或者wstring在linux上不可靠? 任何其他信息也可能有所帮助。

1 个答案:

答案 0 :(得分:2)

EASIEST WAY

以下是您要找的内容,#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] << " ";
    }
}