std::locale可以抛异常,异常信息为bad locale name。
在main函数中try catch后,输出到日志,结果异常就是日志中抛出来的,于是无信息闪退。
修改后的代码如下:
const std::locale sys_local = std::locale("");
const std::string sys_local_name = sys_local.name();
try
{
std::locale::global(std::locale("chs")); //日志主要给编程者看,考虑固定为chs。
}
catch (std::exception &e)
{
std::locale::global(sys_local);
}
举一反三,std的异常,能处理的尽量处理。否则可能很难调查。
例如某程序在win xp en环境程序闪退,没有简单办法建立开发环境获得崩溃信息,实际与此异常有关。
win xp en环境不支持chs local,所以闪退,如果设置失败就恢复为系统默认编码就可以正常运行。