想从控制台输入含汉字字符串到wstring(按unicode字符集存储),问题如下:
wstring wstr1 = L"李66";
wstring wstr2;
wcin >> wstr2; //输入 李66
wstr2汉字“李”成了二个乱码!
二者内存中的数据:
wstr1 : 4e 67 36 00 36 00
wstr2 : co 00 ee 00 36 00 36 00
【原因】输入的“李66”刚开始为c风格字符串,编码为 co ee 36 36(多字节字符集,汉字为GBK编码),wcin按单字节读取并转换为unicode编码方式到wstr2。
【解决】
wstring wstr3;
wcin.imbue(locale("chs")); //指定汉字按两个字节读
wcin >> wstr3;
对于wcout也要先设置一下,否则啥也输出不来。
参考:
1、点击打开链接