Windows 控制台(console)输出宽字符(解决中文输出乱码问题)
由于Windows上面的编码问题比较多,源代码尽量使用UTF8编码(这也是Java或者Web的选择,采用GBK编码会导致乱码问题).
但是当在控制台输出中文时就碰到了问题,由于Windows的控制台根据系统非UNICODE编码及位置的设置,控制台在输出中文时默认是GBK编码,
也就是在控制台输出UTF8字符会变成乱码,那么我们采用宽字符输出,这样就避免了控制台字符集的问题.
控制台宽字符显示有个必要的条件:控制台的字体应当支持宽字符.
将控制台的代码页修改为
437(OEM-United States)
默认的Lucida Console字体支持宽字符.
然后使用_setmode来设置标准输出为_O_U16TEXT即可.示例如下:
#include <fcntl.h> #include <io.h> #include <stdio.h> int main(void) { _setmode(_fileno(stdout), _O_U16TEXT); wprintf(L"天朝文测试"); return 0; }
来源:http://stackoverflow.com/questions/2492077/output-unicode-strings-in-windows-console-app
详细信息见:http://blogs.msdn.com/b/michkap/archive/2008/03/18/8306597.aspx?Redirected=true
关于Windows控制台UTF8流支持的问题:
http://alfps.wordpress.com/2011/11/22/unicode-part-1-windows-console-io-approaches/
http://alfps.wordpress.com/2011/12/08/unicode-part-2-utf-8-stream-mode/
分类:
CornerStone
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(二):用.NET IoT库
· 几个自学项目的通病,别因为它们浪费了时间!
· C#钩子(Hook) 捕获键盘鼠标所有事件 - 5分钟没有操作,自动关闭 Form 窗体
· 特斯拉CEO埃隆.马斯克的五步工作法,怎么提高工程效率加速产品开发?