有时候想快速写一段C++代码来验证某个功能,感觉使用VS就过于重量级了,关键是衣服自己洗比较洁癖,不喜欢看到有无用的工程项目。所以一直想有一个轻量级的编辑器可以快速编译验证。
于是衣服自己洗发现了CodeLite 和 CodeBlock这2个跨平台,相对轻量的工具。
使用过程中,发现CodeLite的命令行输出中中文显示乱码,一开始还以为自己是软件没有安装好,重新下载安装还是不行。后来经过一番搜索,网上观点认为是 G++ 的问题,需要额外添加编译选项。
选择工程项目,右键属性,切换到Compiler,在 C++ Compile Options 里添加一个选项 -fexec-charset=GBK; 即可。其实还可以把这个配置单独新增进去,以后就只用勾选就可以了。
特别需要说明,设置完成后,需要把项目清理重新编译,不然看不到效果,衣服自己洗在这里被坑了好几次了。
衣服自己洗使用jsoncpp来解析项目中使用的json字符串,后来发现一个问题就在于jsoncpp 不支持unicode编码的中文字符。
网上搜索了一下,一种比较弱侵入性的方法如下:
打开json_tool.h文件,找到 codePointToUTF8 方法,修改 else if (cp <= 0xFFFF) 代码段里的内容,添加额外的处理。
//添加中文unicode编码
if((cp >= 0x4E00 && cp <= 0x9FA5) || (cp >= 0xF900 && cp <= 0xFA2D))
{
wchar_t src[2] = { 0 };
char dest[5] = { 0 };
src[0] = static_cast<wchar_t>(cp);
std::string local = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, “chs”);
wcstombs_s(NULL, dest, 5, src, 2);
result = dest;
setlocale(LC_ALL, local.c_str());
}
//下面 else 里代码为原始代码
else
{
result.resize(3);
result[2] = static_cast<char>(0x80 | (0x3f & cp));
result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12)));
}
然后重新编译即可。