0

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

 #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;
 }

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

它既不能在带有 g++ 编译器的 Linux/Ubuntu 中也不能在 Windows XP 中正常工作。

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

我想知道是否至少可以使用 C++ 方法创建一个文件,该文件的名称与我在 d (在代码中)之类的字符串中的名称相同

更正:

我也想在 Windows 和 Linux 上做这些操作

4

2 回答 2

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";  
}
于 2012-09-13T21:33:32.670 回答
0

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

您不想用 UTF-16 中的文字保存源代码。另一种方法不是将字符串存储在文字中,而是将字符串存储在具有明确定义的编码的单独位置,该编码不会随着单击 IDE 中的按钮而改变。

于 2012-09-13T21:28:19.740 回答