【发布时间】:2012-09-07 01:16:06
【问题描述】:
我想做的只是输出一行文字:
#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 上做这些操作
【问题讨论】:
-
在 Linux 上,文件名是不透明的字节序列,没有语义(没有在 API 中作为空终止字符串传递)。在 Windows 上,文件名是 16 位整数的不透明序列,通常假定(但不是必需)构成 UTF-16 代码单元。也许我的this little rant 也有用。
-
这不是语言环境问题。语言环境包含诸如小数在不同国家/地区的表示方式等方面。您指的是Unicode与ASCII。您要做的就是写出 Unicode 字符,因此
wstring中的w表示宽字符表示。 -
"它在"中都不能正常工作。当你尝试时发生了什么?它应该在这两种环境中都能正常工作。
-
另外请记住,Windows 控制台窗口不处理 unicode。 程序 可以很好地处理 unicode,但输出窗口不能。