windows std local不支持utf8引起的日志多语言问题

程序中一直使用chs设置当前编码

std::locale::global(std::locale("chs"));

在中文、英文、法文等多语言切换过程中,一直未发现问题,结果遇到西班牙文中的¡字符就写文件失败了。
可能在以前也有类似问题,但未引起注意。

问题的本质就是windows local不支持utf8,中文时设置为chs,写文件之后,txt文件就确定为chs编码的txt,此时切换为es西班牙文,接着写文件,es编码与chs编码不兼容就写文件失败。
一开始如果写文件都是utf8就没这个问题,但这时需要解决各种编码向utf8转码,且写文件时要用binary方式写char[]。

如果是日志,西班牙用户用了,日志为西班牙文,万一有啥问题要调查,开发人员又看不懂西班牙文,所以日志一般固定为开发人员的母语,或者en。考虑无法排除输出各国语言中的特殊字符,日志模块改为utf8比较合适。

你可能感兴趣的:(cpp,utf8,local,日志,多语言)