首页 > 解决方案 > 如何初始化或将中文分配给wstring?

问题描述

我尝试使用 L"string",但它不起作用。

#include <iostream>
using namespace std;

int main(){
    wstring wstr = L"你好";//[Error] converting to execution character set: Illegal byte sequence
    wcout<<wstr<<endl;
}

使用 wcin 并输入中文效果很好。

#include <iostream>
using namespace std;

int main(){
    wstring wstr;
    wcin>>wstr;//Input Chinese is OK
    wcout<<wstr<<endl;
}

如何初始化或将中文分配给wstring?

编辑:我尝试了一些在线编译器。他们都可以编译,但都输出“??”。

例如 cpp.sh jdoodle onlinegdb repl.it

编辑 2:我安装了 g++ i868 MinGW-W64 8.1.0。使用 Visual Studio 将 cpp 文件保存为 utf8 格式。然后使用命令行编译它。它仍然没有输出。

标签: c++unicodewstring

解决方案


您的编译器显然不喜欢其源文件中的 Unicode 字符。尝试使用 Unicode 转义符初始化您的字符串,而不是:

wstring wstr = L"\u4E2D\u6587"; // These MAY be the correct codes.

其中4E2D6587被替换为您想要的字符的实际十六进制值。(抱歉,我无法访问完整的中文字符 Unicode 表:我尝试将它们粘贴到我的编译器中,这些是它在翻译时给我的值。)

给出的 Unicode 值适用于您问题中的字符串(中文);对于您发布的代码中的(不同 - 你好)一个,使用L"\u4F60\u597D".

另请参阅@MarekR 的答案。


推荐阅读