c++ - 如何初始化或将中文分配给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 格式。然后使用命令行编译它。它仍然没有输出。
解决方案
您的编译器显然不喜欢其源文件中的 Unicode 字符。尝试使用 Unicode 转义符初始化您的字符串,而不是:
wstring wstr = L"\u4E2D\u6587"; // These MAY be the correct codes.
其中4E2D
和6587
被替换为您想要的字符的实际十六进制值。(抱歉,我无法访问完整的中文字符 Unicode 表:我尝试将它们粘贴到我的编译器中,这些是它在翻译时给我的值。)
给出的 Unicode 值适用于您问题中的字符串(中文);对于您发布的代码中的(不同 - 你好)一个,使用L"\u4F60\u597D"
.
另请参阅@MarekR 的答案。
推荐阅读
- node.js - 从同一个节点项目运行 2 个不同的容器
- c# - ApiController 未从 HttpRequest (Razor) 接收身份信息
- javascript - 如何通过嵌套值获取模型对象?
- c++builder - 仅使用 TMonthCalendar 数月和数年
- python-3.x - Python:ValueError:int() 的无效文字,基数为 10:'\x00
- machine-learning - 有多个分支时,caffe 是如何计算梯度的?
- reactjs - 如何在 React axios 中对这个函数进行开玩笑测试?
- ros - RTabMap 找不到节点
- python - 在同一列中具有不同格式的 Pandas 日期时间
- java - Java 8 对多个对象进行排序