CodeBlocks中文乱码

编码设置

CodeBlocks编码

Setting->Editor…->General settings->Other settings->Encoding
gcc文件编码
Setting->Compiler->Compiler settings->Other Options:
-finput-charset=UTF-8
-fexec-charset=UTF-8
-finput-charset=GBK
-fexec-charset=GBK

控制台编码

cmd 下 输入 chcp
936 -> GBK-936
65001 -> UTF-8

控制台更改为UTF-8

windows默认936
cmd输入chcp 65001 然后右键cmd标题栏->属性->字体->选择Lucida Console和合适的字体大小 点击确定.关闭cmd

GBK中文乱码

检查CodeBlocks中编码设置和windows设置是否一致.
因为windows默认编码是GBK-936,所以将Editor->…Encoding改成GBK-936.[gcc文件编码]改成GBK.

CodeBlocks使用UTF-8编码

将Editor->…Encoding改成UTF-8.gcc文件编码(参考上面的)改成utf-8.

UTF-8中文乱码完美解决方案

写代码的时候,utf8,多字节.都是使用char []来保存数据.但是内部编码不同. code blocks使用utf-8编码, 输出的信息也是utf8,但是控制台会把字符串当做多字节编码来处理,所以会产生乱码.
将utf-8转换成多字节编码,然后再用printf/cout…等等函数 输出数据就是正常的了.
http://blog.csdn.net/czy463/article/details/47060759

//转换文字ACP编码为Utf8编码
inline void ConvertACPToUtf8(char*szAcp, int nAcpLen, char *szUtf8, int nUtf8Len) 
{ 
    int len=MultiByteToWideChar(CP_ACP, 0, szAcp, -1, NULL,0); 
    unsigned short * wszUtf8 = new unsigned short[len+1]; 
    memset(wszUtf8, 0, len * 2 + 2); 
    MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)szAcp, -1, (LPWSTR)wszUtf8, len); 
    len = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, NULL, 0, NULL, NULL); 
    memset(szUtf8, 0, nUtf8Len); 
    if(len <= nUtf8Len)
    {
        WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL); 
    }
    else
    {
        WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, szUtf8, nUtf8Len-1, NULL,NULL);
    }
    delete[] wszUtf8; 
}
//转换文字Utf8编码为ACP编码
inline void ConvertUtf8ToACP(char *szUtf8, int nUtf8Len,char *szAcp, int nAcpLen) 
{ 
    int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)szUtf8, -1, NULL,0); 
    unsigned short * wszGBK = new unsigned short[len+1]; 
    memset(wszGBK, 0, len * 2 + 2); 
    MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)szUtf8, -1, (LPWSTR)wszGBK, len); 
    len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL); 

    memset(szAcp, 0, nAcpLen); 
    if(len <= nAcpLen)
    {
        WideCharToMultiByte (CP_ACP, 0, (LPWSTR)wszGBK, -1, szAcp, len, NULL,NULL); 
    }
    else
    {
        WideCharToMultiByte (CP_ACP, 0, (LPWSTR)wszGBK, -1, szAcp, nAcpLen-1, NULL,NULL); 
    }

    delete[] wszGBK; 
} 

UTF-8编码.控制台乱码

CodeBlocks控制台使用的是其根目录下cb_console_runner.exe程序来启动程序. 这个程序会使用windows默认编码.如果将编码改成UTF-8,就会出现乱码. 解决方式:
1. 在程序中使用system(“chcp 65001”),这样只会改变当前输出的控制台窗口.但是测试后发现,输出几次之后,就不再输出信息了.
2. 将cb_console_runner.exe改名.更改控制台全局默认为UTF-8
(chcp 65001).

Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境.   相比于基于Delphi的Dev-C++共享C++IDE,Code::Blocks是开放源码软件。Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。   虽然Code::Blocks从一开始就追求跨平台目标,但是最初的开发重点是Windows系统下的版本,从06年3月21日版本:1.0 revision 2220开始,Code::Blocks在它的每日构建中正式提供Linux版本(分两个版本:ubuntu.deb和fc4.rpm)。这样 Code::Blocks在1.0发布时就会是跨越平台的C/C++IDE,它将支持Windows和Linux的主要版本。长期以来C++开发员在Linux没有好用、通用的C++ IDE的局面就要结束。而这个IDE对于Windows下的用户同样重要,由于它开放源码的特点,Windows用户可以不依赖于VS.NET,编写跨平台C++应用。   Code::Blocks提供了许多工程模板,这包括:控制台应用、DirectX应用、动态连接库、FLTK应用、GLFW应用、Irrlicht工程、OGRE应用、OpenGL应用、QT应用、SDCC应用、SDL应用、SmartWin应用、静态库、Win32 GUI应用、wxWidgets应用、wxSmith工程,另外它还支持用户自定义工程模板。在wxWidgets应用中选择UNICODE支持中文。   Code::Blocks支持语法彩色醒目显示,支持代码完成(目前正在重新设计过程中)支持工程管理、项目构建、调试。   Code::Blocks支持插件,目前的插件包括代码格式化工具AStyle;代码分析器;类向导;代码补全;代码统计;编译器选择;复制字符串到剪贴板;调试器;文件扩展处理器;Dev-C++ DevPak更新/安装器;DragScroll,源码导出器,帮助插件,键盘快捷键配置,插件向导;To-Do列表;wxSmith;;wxSmith MIME插件;wsSmith工程向导插件;WindowsXP外观。   Code::Blocks具有灵活而强大的配置功能,除支持自身的工程文件、C/C++文件外,还支持AngelScript、批处理、CSS文件、D语言文件、Diff/Patch文件、Fortan77文件、GameMonkey脚本文件、Hitachi汇编文件、Lua文件、MASM汇编文件、Mathlab文件、NSIS开源安装程序文件、Ogre Compositor脚本文件、Ogre Material脚本文件、OpenGL Shading语言文件、Python文件、Windows资源文件、XBase文件、XML文件、nVidia cg文件。识别Dev-C++工程、MS VS 6.0-7.0工程文件,工作空间、解决方案文件。   Code::Blocks基于wxWidgets开发,正体现了wxWidgets的强大。以前Borland C++ Builder X宣称基于wxWidgets开发跨平台、兼容性好、最优秀的C++ IDE环境,但没有实现;现在Code::Blocks+GNU GCC正在实现这个理想。让我们拭目以待。国内的Code::Blocks爱好者和跨平台开发员应该尽快建立中文Code::Blocks网站,提供Code::Blocks中文化支持,促进Code::Blocks在国内的发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值