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(请注意中间两行没有正确打印)

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

在我的苹果笔记本电脑和 FreeBSD(通过 ssh)盒子之一上,我没有从 w_* 代码中获得 o/p。我只是让第一个和最后一个 cout 被执行 vikrant मुरुगन--18

我的理解是,如果未指定,这些字符串将被视为 UTF 8。如果字符串可以处理它,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 回答