为了账号安全,请及时绑定邮箱和手机立即绑定

C++以utf8编码输入中文

C++以utf8编码输入中文

C++
湖上湖 2018-07-09 07:23:04
用C++的ofstream往utf8编码的文件中写入中文(以utf8编码),当写入英文时文件还是utf8编码,当输入中文后文件就不是utf8编码了,请问如何以utf8编码向文件中输入中文。
查看完整描述

2 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

locale 对象是不可变的,即在它们的生命周期中,它们的内容不可改变。所包含的 facet 不能进行修改或替换,同时 facet 不能增加或删除。
鉴于以上特性,在使用 locale 时一般都是根据需要生成新的 locale 对象,然后选入IO流中。因此 locale 的构造函数就变得十分多样,方便我们以各种形式构造所需要的locale 对象。
例如,需要 std::wostream 输出中文,我们就需要 locale("chs") 中编码转换相关的功能,但若直接选择 locale("chs"),输出数字时也会进行转换处理,例如将 1234 输出为 "1,234"。为了避免这一转换,就需要保留原 locale("C") 中除了字符相关的其他facet。如下处理即可
locale loc("chs", locale::ctype);
此函数以 global 对应的 locale (一般是 locale("C") ) 初始化 loc 并选择 locale("chs") 的字符相关 facet ,这样我们就可以用 loc 正确输出中文,并保持输出数字时不进行其他处理
其他可参阅 MSDN 中关于 locale 的构造函数说明,解释很详细,用法很简单。
此外,locale 对象还可使用 combine 成员函数 选取其他 locale 中指定 facet 进行组合。总之接口多样,不过也一定程度上增加了对 locale 学习的复杂性。

查看完整回答
反对 回复 2018-07-27
  • 2 回答
  • 0 关注
  • 1500 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信