社区
C++ 语言
帖子详情
为什么用wcout输出中文要先setlocale
Lactoferrin
2011-06-30 03:27:53
为什么用wcout和wprintf输出unicode的中文要先setlocale?
unicode不是本身就支持多国语言吗
...全文
1605
76
打赏
收藏
为什么用wcout输出中文要先setlocale
为什么用wcout和wprintf输出unicode的中文要先setlocale? unicode不是本身就支持多国语言吗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
76 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
libraleft
2012-04-25
打赏
举报
回复
wcout.imbue(locale(locale(),"",LC_CTYPE));
wcin.imbue(locale(locale(),"",LC_CTYPE));
hushoubo
2011-11-30
打赏
举报
回复
同意
[Quote=引用 38 楼 satiling 的回复:]
Unicode 是字符集,只是用来表示字符的。
Locale 决定的是这些字符以什么样的形式输出。
[/Quote]
赵4老师
2011-11-30
打赏
举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。
中文简体Windows操作系统自带的字库中字模是按Unicode顺序索引还是按GBK顺序索引?
中文繁体Windows操作系统自带的字库中字模是按Unicode顺序索引还是按BIG5顺序索引?
用户 昵称
2011-07-02
打赏
举报
回复
俺也脚着可以直接输出,反正俺也不关注这个。
wesweeky
2011-07-02
打赏
举报
回复
必须 setlocale
zhan7505201
2011-07-02
打赏
举报
回复
学习。
kang321112
2011-07-02
打赏
举报
回复
sdfsefhel nl k
www_adintr_com
2011-07-01
打赏
举报
回复
国际化和本地化虽然有关系, 但确是两个不同的东西.
C++ 对国际化的支持是不完善的, 它的库并没有使用操作系统 API 的 W 版本.
zql602709051
2011-07-01
打赏
举报
回复
对我有用,看看。
yjgx007
2011-07-01
打赏
举报
回复
我猜想这里有两种模式:
1) 字符存储模式 2) 字符显示模式
如果要将字符显示正确, 就要将字符转成可显示的编码 - MBCS
rainman_13
2011-07-01
打赏
举报
回复
受教了,顶一个
rlexyum
2011-07-01
打赏
举报
回复
这个我认为就没有必要去纠结为什么不直接用UNICODE码了
存在即合理
知道他为什么不显示中文我觉得就已经够了
就好像 编码编码 知道怎么用编码就OK了 不用去知道每个字符是对应的怎样的十六进制
对吧
[Quote=引用 56 楼 lactoferrin 的回复:]
引用 51 楼 rlexyum 的回复:
引用 48 楼 lactoferrin 的回复:
MBCS的含义就是各个语言的编码方式不一样
unicode各个语言的编码方式就是一样的,无论是中文系统还是俄文系统你都是0x4f60(utf-16)
因此应该可以统一显示,hpsmouse和上面的代码显示vc运行库是有意地将unicode转换为了mbcs再来显示的
恩 ……
[/Quote]
jsjygm
2011-07-01
打赏
举报
回复
菜鸟学习来啦。
luciferisnotsatan
2011-07-01
打赏
举报
回复
[Quote=引用 54 楼 lactoferrin 的回复:]
我觉得wcout输出宽字符串时可以直接用WriteConsoleW,没必要转来转去
[/Quote]
有可能当年微软的系统还没有WriteConsoleW。
反正这个微软估计不会改了。
Lactoferrin
2011-07-01
打赏
举报
回复
[Quote=引用 51 楼 rlexyum 的回复:]
引用 48 楼 lactoferrin 的回复:
MBCS的含义就是各个语言的编码方式不一样
unicode各个语言的编码方式就是一样的,无论是中文系统还是俄文系统你都是0x4f60(utf-16)
因此应该可以统一显示,hpsmouse和上面的代码显示vc运行库是有意地将unicode转换为了mbcs再来显示的
恩 你说的这些就是我刚才所说的啊
[/Quote]
你说为什么vc运行库要转一次,不直接输出
scandy
2011-07-01
打赏
举报
回复
路过打酱油
Lactoferrin
2011-07-01
打赏
举报
回复
我觉得wcout输出宽字符串时可以直接用WriteConsoleW,没必要转来转去
Lactoferrin
2011-07-01
打赏
举报
回复
DWORD c;
WriteFile(GetStdHandle(-11),"ababab哦咯斯蒂芬",sizeof("ababab哦咯斯蒂芬"),&c,0);
WriteFile(GetStdHandle(-11),L"ababab哦咯斯蒂芬",sizeof(L"ababab哦咯斯蒂芬"),&c,0);
输出
ababab哦咯斯蒂芬 a b a b a b 鎀疶痚倓瑐
rlexyum
2011-07-01
打赏
举报
回复
这也就是为什么要用到setlocale
rlexyum
2011-07-01
打赏
举报
回复
[Quote=引用 48 楼 lactoferrin 的回复:]
MBCS的含义就是各个语言的编码方式不一样
unicode各个语言的编码方式就是一样的,无论是中文系统还是俄文系统你都是0x4f60(utf-16)
因此应该可以统一显示,hpsmouse和上面的代码显示vc运行库是有意地将unicode转换为了mbcs再来显示的
[/Quote]
恩 你说的这些就是我刚才所说的啊
加载更多回复(56)
关于 w
cout
输出
中文
的问题
1.
cout
场景1: 在源文件中定义 const char* str = "
中文
" 在 VC++ 编译器上,由于Windows环境用 GBK编码,所以字符串 "
中文
" 被保存为 GBK内码,编译器也把 str 指向一个包含有 GBK编码的只读内存空间(因为是const)。用
cout
输出
str 时,由于
中文
Windows环境用GBK编码,所以把GBK编码的 str 内容
输出
到控制台,没问题。场景2: 在Linux 下编辑一个文件 const char* str = "
中文
", 由于Linux普遍使.
w
cout
输出
时显示不了
中文
|| 如何使用wprintf和w
cout
输出
汉字
w
cout
输出
时显示不了
中文
w
cout
输出
时显示不了
中文
,加上下面这句就行了。 std::w
cout
.imbue(std::
locale
("chs")); Primary language Sublanguage Language string Chinese Chinese "chinese"
w
cout
中文
输出
问题
转载自:https://www.xuebuyuan.com/1730068.html 【不设置全局本地化环境时】 在VS2005下用C/C++写程序,如果程序没有调用
set
locale
函数设置本地化环境,则
cout
,printf都能正常的
输出
中文
。然而,所有涉及宽字节串和多字节串的
中文
相互转换的功能都将以失败告终,比如:调用wcstombs函数或mbstowcs,或者使用了间接...
C++_w
cout
/ C_wprintf (w
cout
输出
中文
)
int _tmain(int argc, _TCHAR* argv[]) { w
cout
.imbue(std::
locale
("chs")); wstring s = (L"我爱"); w
cout
w
cout
system("pause"); return 0; } iostream、printf/wprintf和
中文
输出
linux w
cout
输出
中文
,解决为什么w
cout
不能
输出
中文
问题
转自http://www.cnblogs.com/moonz-wu/archive/2008/12/30/1365552.htmlwprintf 和 w
cout
这篇文章应该是[netsin]的成果,我勤快,记下来。注:wprintf是C的标准库函数,但w
cout
不是C++的标准成员,C++中的 L"……" 是宽字符,却未必是unicode字符,这与编译器实现相关。[乾坤一笑]说:为什么 C/C++...
C++ 语言
64,683
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章