Avatar ·

std::wstring 对比 std::string:何时在 C++ 中使用 Unicode,何时使用 ASCII?

大家好!我是一名初学 C++ 的开发者,一直对 std::wstring 和 std::string 的区别感到困惑。我了解到 std::string 用于“普通”字符串,而 std::wstring 用于 Unicode。但在实践中,我遇到了很多问题。 举个例子:我写了一个程序,从文件夹中读取文件名。有些文件包含西里尔字母,比如“отчет.docx”。我使用 std::string: ```cpp std::string filename = "отчет.docx"; std::ifstream file(filename); ``` 结果文件打不开!但如果我使用 std::wstring 和 wifstream,一切正常: ```cpp std::wstring filename = L"отчет.docx"; std::wifstream file(filename); ``` 但这样又出现了新问题:我无法将 wstring 传递给期望 std::string 的函数(例如旧库),而且通过 std::cout 输出到控制台时会出现乱码。不得不使用 std::wcout,但它的行为也很奇怪。 还有一个问题:如果我编写跨平台应用程序(Windows + Linux),在 Linux 上 std