问题描述
- 程序中是不是一般不用char类型而是用wchar_t类型呢
-
char类型是不是在程序中用处不大,不能处理中文和其他非ASCII码,而且据说处理wchar_t的性能比char高,请教各位高手,是不是程序中一般都会选择用wchar_t,而不用char呢?
解决方案
这种做法的局限性是明显的,首先,我们必须要考虑识别这是一个汉字还是两个英文,特别是,一些>127的ASCII编码被用一些特殊字符,而很不幸,我们没法区分它是中文还是这些特殊字符。
所以你在一些汉化的DOS软件上经常看到显示出来的菜单或者图示中夹杂着乱码(不知道你用过UCDOS/TurboC或者QBasic没有)
另外,即使这样表示的字符也很有限,我们知道,汉字就有数十万个,特别是古文,根本没法表示。还有,不同的编码不通用,台湾地区用Big5,大陆是GB,韩文、泰文、日文,每个语言都有自己的编码。
所以那时很盛行转码软件(不知道你听说过四通利方RichWin,南极星没有)
Unicode的好处就是,将所有的字符统一编码,而且在操作系统和编程语言层面支持宽字符,简化了编程,也不用考虑之前说的二义性的问题
解决方案二:
一些操作系统不支持宽字符,出于兼容的需要,还是需要char的,有时候我们用条件编译和宏来在这两者切换
参考:http://blog.sina.com.cn/s/blog_4c4efaf6010008xm.html
解决方案三:
也不是,在早期,DOS/Windows 9X的时代,操作系统只支持ANSI字符,那么汉字实际上是通过占用2个char来实现的。
那么怎么区分这到底是一个汉字还是2个英文呢?我们规定,如果字符的最高位>127,那么就是中文,否则就是英文。
解决方案四:
另外,不是说Linux对宽字符支持不好,而是这是一个标准的问题,Unicode标准是在2000年前后普及的,在此之前的Windows一样没有支持,相反,现在的Linux,支持也非常良好。
解决方案五:
贴个图:
看不见的话看这里
http://www.xmpig.com/thread-432068-1-1.html
看到这些屯屯屯屯屯,北北北北北了么?
解决方案六:
非中文的都可以不用宽字符吧
解决方案七:
现在的char可以支持中文
比如在vs2010里,char *a="论坛";
此时是GBK编码。
解决方案八:
windows上面已经比较好的支持unicode,所以Visual Studio默认字符集已经是宽字符了
而Linux上,缺省还是char,对宽字符支持不够好