C ++多语言字符串输出

时间:2012-09-13 21:17:36

标签: c++ windows linux unicode

我想做的一切只是输出一行文字:

 #include <iostream>
 #include <string>

 int main(void)
 {
   std::wstring    d=L"string_contains_many_languages_German_Mädchenß_Russian_этотязык_and_ブリザンメント";
   std::wcout<<d<<"\n";

   return 0;
 }

我听说过语言环境。但是,如果我有一个多语言用户怎么办?所以,我不能只坚持一个语言环境。

在Linux / Ubuntu中使用g ++编译器或在Windows XP中都不能正常工作。

我怀疑它或许它不仅取决于C ++,而且取决于显示此信息和来自环境的终端。 在Linux中,我可以使用命令touch“ブリザаäЯ”(tilda终端)创建一个名称文件。

我想知道是否至少可以创建一个文件,其中包含我在字符串中的名称,如d(在代码中),使用C ++表示

校正:

我也希望在Windows和Linux上执行这些操作

2 个答案:

答案 0 :(得分:1)

作为一般规则,wchar_t在非Windows平台上毫无意义。在Linux上,这很好用:

#include <iostream>
#include <string>

int main(void)
{
  std::string d = "Mädchenß_этотязык_ブリザンメント";
  std::cout << d << "\n";  
}

只要您没有使用在某处使用UTF-8编码以外的其他东西的古老配置。

由于多种原因,Windows上的事情变得更加困难,但这只是一种方式:

#include <iostream>
#include <string>
#include <io.h>
#include <fcntl.h>

int main(void)
{
  _setmode(_fileno(stdout), _O_U16TEXT);
  std::wstring d = L"Mädchenß_этотязык_ブリザンメント";
  std::wcout << d << "\n";  
}

答案 1 :(得分:0)

在Windows上,您应该能够将其写为文字,以UTF-8保存文件(因为大多数源代码文件已经保存),然后在输出之前执行nowide的widen(字符串)。它会工作。

您不希望使用UTF-16中的文字保存源代码。另一种方法是不在文字中存储字符串,而是在具有明确定义的编码的单独位置,只需单击IDE中的按钮即可更改。