我不知道vc中所谓的unicode究竟指的是什么,我现在对这个概念很模糊。microsoft总是把unicode和宽字符集混用。如此推断,它应该指的是utf-16或者ucs-2?
其次便是win下locale的问题。它的locale当然不是zh_CN.GB2312这种。(我真是奇怪为什么当年ISO在制定locale相关函数的时候既然把locale的分类都规定了,为什么不把locale的具体名称也给个ISO规范出来呢?想想可怜的程序员,比如得写
#ifdef _WIN32
std::string locale="chs";
#else
std::string locale="zh_CN.GB2312";
#endif
My god!)
vc下如果locale忘记了设置(默认是"C")或者设置不当,那么atoi等函数不能使用,且宽字节的stream,例如std::wcout, std::wfstream都不能输出中文,一旦输出中文,这个stream的状态就会变成bad。而默认情况下stream是不抛出异常的,所以很多人就完全忽略这样的错误了,只是在程序执行完后才发现自己什么都没有得到。
评论