为什么wcout输出中文是空

刘小浪 2013-11-06 06:56:58
中文windows 8
mingw32
g++ 是4.8.1
ide是codeblocks

很奇怪为什么wcout输出中文是空。但是wprintf输出的又是中文字符。如何让wcout正常输出呢?


#include <iostream>
#include <clocale>
using namespace std;
int main( void )
{
setlocale(LC_ALL,"chs");

wcout << L"中国" << endl;
wprintf(L"中国");
return 0;
}


...全文
638 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpcads 2013-11-08
  • 打赏
  • 举报
回复
setlocale(LC_ALL,"chs");
这句话是针对 GBK 的源代码文件,因为如果没有这句话,编译器不知道
L“中国”
引号里的字符对应 unicode 中哪两个字。 所以显然这个不适用于 UTF-8 编码的源代码文件。
刘小浪 2013-11-08
  • 打赏
  • 举报
回复
std::wcout.imbue(std::locale("chs")); 这样设置不行,会报异常,不知道为什么。 你们可以亲测一下。源代码文件的编码是UTF-8.然后输出中文,使用dos窗口运行。
lunat 2013-11-07
  • 打赏
  • 举报
回复
UTF-8?很简单,直接cout。
赵4老师 2013-11-07
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A wcout.imbue(locale("chs")); wcout << wstring(L"中国") << endl;
passion_wu128 2013-11-07
  • 打赏
  • 举报
回复
std::wcout.imbue(std::locale("chs"));
lm_whales 2013-11-07
  • 打赏
  • 举报
回复
UTF-8.??? 这个只有支持这种编码的系统才能用。 Windows 本身是不支持的,Windows 8 也未必支持。 另外,还有编辑器,和编译器的支持问题。 编辑器,和编译器是否一致的问题。 U8,U16,U32都支持的编译器,要支持最新标准的编译器才支持。 字符串前缀是 U8,U,U32 即: U8"xxxxxxx" U"xxxxxxx" U32"xxxxxxx"
刘小浪 2013-11-07
  • 打赏
  • 举报
回复
引用 1 楼 max_min_ 的回复:

  setlocale(LC_CTYPE, "C"); 
// 加上这个试试吧
按照BLOG上的方法,各种都试过了。悲催的很,都不成功。
刘小浪 2013-11-07
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
wcout没什么区别,应该是中文编码的问题,setlocale(LC_ALL,"")使用本地编码是比较好的选择,因为你用文本编辑器编辑的时候,大多选择的本地编码。 [quote=引用 楼主 GalfordLiu 的回复:] 中文windows 8 mingw32 g++ 是4.8.1 ide是codeblocks 很奇怪为什么wcout输出中文是空。但是wprintf输出的又是中文字符。如何让wcout正常输出呢?

#include <iostream>
#include <clocale>
using namespace std;
int main( void )
{
    setlocale(LC_ALL,"chs");

    wcout << L"中国" << endl;
    wprintf(L"中国");
    return 0;
}
[/quote] setlocale(LC_ALL,"") 与setlocale(LC_ALL,"chs") 或setlocale(LC_ALL,".936") 其实都是一样的,都是指定gbk编码。 源代码文件的编码格式是UTF-8. 如果改成GBK是没有什么问题的。问题就是源代码编辑是UTF-8,使用wcout输出中文不显示,就算设置了locale也一样不显示,但是wprintf是可以的。。。。
图灵狗 2013-11-06
  • 打赏
  • 举报
回复
wcout没什么区别,应该是中文编码的问题,setlocale(LC_ALL,"")使用本地编码是比较好的选择,因为你用文本编辑器编辑的时候,大多选择的本地编码。
引用 楼主 GalfordLiu 的回复:
中文windows 8 mingw32 g++ 是4.8.1 ide是codeblocks 很奇怪为什么wcout输出中文是空。但是wprintf输出的又是中文字符。如何让wcout正常输出呢?

#include <iostream>
#include <clocale>
using namespace std;
int main( void )
{
    setlocale(LC_ALL,"chs");

    wcout << L"中国" << endl;
    wprintf(L"中国");
    return 0;
}
max_min_ 2013-11-06
  • 打赏
  • 举报
回复
引用 1 楼 max_min_ 的回复:

  setlocale(LC_CTYPE, "C"); 
// 加上这个试试吧
刚才了一些资料 wcout 不能正常输出中文 应该设置本地的

 wcout.imbue(locale(locale(),"",LC_CTYPE)); 
博客地址也贴出来 楼主参考下 http://blog.csdn.net/gonxi/article/details/5931006
max_min_ 2013-11-06
  • 打赏
  • 举报
回复

  setlocale(LC_CTYPE, "C"); 
// 加上这个试试吧

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧