locale的使用总结(转自http://www.tucue.net/showtopic-371.aspx)
来源:互联网 发布:店铺推广软件 编辑:程序博客网 时间:2024/06/06 15:09
locale 是多种 facet 的容器,每种 facet 管理与 locale 相关的一种功能。
facet 除了按名称区别外,更常用的是按 category 来分类。分类情况如下:
locale::ctype 类别,包括以下 facet 模板
ctype // 字符分类和转换
codecvt // 字符编码转换
locale::collate 类别,包括以下 facet 模板
collate // 字符串校对
locale::message 类别,包括以下 facet 模板
messages // 从信息目录中获得本地化信息
locale::numeric 类别,包括以下 facet 模板
numpunct // 有关数字和布尔运算表达式中标点符号及格式信息
num_get // 代表数字或布尔值的字符串的解析
num_put // 代表数字或布尔值的格式化字符串的生成
locale::monetary 类别,包括以下 facet 模板
moneypunct // 货币表达式中的标点符号及格式
money_get // 代表货币值的字符串的解析
money_put // 代表货币值的格式化字符串的生成
locale::time 类别,包括以下 facet 模板
time_get // 代表日期和时间的字符串的解析
time_put // 代表日期和时间的格式化字符串的生成
使用方法:
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 学习的复杂性。
最后,还有更简便的解决方案,即全局 locale 对象。
如果你建立了一个流对象,并且没有规定流使用的 locale 对象,那么流使用全局 locale 对象。如果我们在程序开始处改变全局 locale 对象为我们需要的形式,以后就不需再反复设定每个流的 locale 了。如
locale::global(locale("",locale::ctype));
除了将字符处理部分改为当前系统默认的编码方式外其他不变,这样一般就满足需求了。
再加一条,当流建立后再改变全局locale,则对已建立的流无影响。还有改变 C++ 的全局 locale 对象可能会影响 C 的全局 locale 设定,请不要混用。既然用 locale 对象,就全部采用 C++ 的风格吧
- locale的使用总结(转自http://www.tucue.net/showtopic-371.aspx)
- 如何使用VS写单元测试(转自:http://www.51crazy.net/Article/216.aspx)
- [转]有很多人不明白什么是“软件开发”http://bbs.sz84.net/showtopic-1825.aspx
- ASP.NET操作EXCEL的总结篇(转自http://www.jb51.net/article/26273.htm)
- vs2010 MSDN文档安装方法(转自:http://www.ljf.cn/archives/91.aspx)
- VS高级调试技巧 转自CodeProject (http://www.codeproject.com/KB/debug/Advanced_Debugging.aspx)
- 好东东呀。系统进程描述 。转贴自http://www.donews.net/yizhizhu/archive/2004/09/20/104667.aspx
- .net C# 反射技术使用例子(转自:http://www.programbbs.com/doc/5740.htm)
- UITableView性能优化(转自http://www.keakon.net)
- 编程语录(转自http://www.aqee.net/)
- http://www.trirand.net/demo.aspx
- http://www.iwms.net/n770c13p3.aspx
- Windows下的.NET+ Memcached安装(转自:http://www.yaosansi.com/post/1396.html)
- OC4J的使用[转自http://www.suneca.com]
- JS面向对象的支持[转自http://www.cnblogs.com/dwjaissk/archive/2006/12/18/595761.aspx]
- SQL SERVER取出日期型怎么毫秒都丢失了,请教~~http://www.dotnetsky.net/netsave/ShowTopic-41286.html
- 字符编码的奥秘(转自http://blog.csdn.net/hbrqlpf/archive/2007/09/24/1798935.aspx)
- C#环境下的钩子详解(转自http://blog.csdn.net/stevenson_aspdotnet/archive/2010/03/04/5346725.aspx)
- 飘
- VC 编程ANSI环境下读写Unicode文件和将CStdioFile类扩展,读取UNICODE文本文件
- 是谁!让程序员只在乎自己的一亩三分地
- 【无法在web服务器上启动调试。与Web服务器通信时出现身份验证错误】的解决方案
- 如何在C#中利用DataGridView控件编辑数据
- locale的使用总结(转自http://www.tucue.net/showtopic-371.aspx)
- java产生随机数的几种方式
- 第一篇
- SVN的权限管理--方式之一
- 视图
- lcd
- Cocoa 教程
- ADO数据库技术
- FrontRow