c++-程序中是不是一般不用char类型而是用wchar_t类型呢

问题描述

程序中是不是一般不用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,对宽字符支持不够好

时间: 2024-10-03 04:31:54

c++-程序中是不是一般不用char类型而是用wchar_t类型呢的相关文章

sqlite-如何将导入到数据库表中的数据保存在程序中,而不用每次换调试机时还得重新导入数据

问题描述 如何将导入到数据库表中的数据保存在程序中,而不用每次换调试机时还得重新导入数据 如题:我有一张excel的表,我将其存为.csv文件,然后通过dos命令下的sqlite3命令导入到了数据库表中,问题是如果不换机子,导入到该数据库表中的数据永久有效.如果我换机子调试的话,该数据库表中的数据就不存在了,会报错,请问有没有解决办法?谢谢! 解决方案 最好存入远程数据库每次启动同步下来数据就可以了,sqlite是系统自带的数据库具体的就是http://blog.csdn.net/tianyit

诊断和纠正 Java 程序中反复出现的错误类型

程序|错误 欢迎光临诊断 Java 代码,一个隔周更新的新专栏,着重讨论和您日常编程工作有关的 Java 解决方案.本文为第一篇,介绍了错误模式的概念,一个非常有用的概念,它将提高您检测和修正代码中错误的能力.您会了解到一种最普遍的错误模式,这将为您开始识别和避免更高级的错误模式奠定基础.错误模式和它们为什么有用正如好的编程技能涉及很多设计模式(您可以在不同的程序上下文中组合和应用这些模式)的知识一样,好的调试技能也涉及对 错误模式的一定了解.错误模式就是已发出的错误和程序中潜在的错误之间的重复

Windows 8开发入门(十八)windows 8开发模拟器和程序中关联文件类型

本文将讲解两个内容,1.Windows 8 开发模拟器的使用.2.程序中设置关联文件类型. 一. Windows 8 开发模拟器的使用 1.在VS2012中自带有Windows 8开发模拟器,我们选择VS界面中的调试按 钮从"本地计算器"改选为"Simulater"模拟器即可,如下图: 2.点击"Simulator"按钮即可弹出以下界面 3.此时我们可以看到模拟器上面有很多按钮这些按钮的功能有模拟单点触摸.多点触摸.旋转设备等操作 .我们在这里可

c++-C#中的string或者char类型数据如何转化为C++中的char类型数据

问题描述 C#中的string或者char类型数据如何转化为C++中的char类型数据 C++代码:bool hasfire(char s[100]) 因为使用C++做DLL文件,调用hasfire()这个函数时,发现C#中的char类型和C++中的不大一样,不知道怎么处理才能把C#中的char转化成C++中的char类型.

DataGridView中有一列是ComBox类型的列,请问我怎么在程序中向这一列中赋值呢?

问题描述 DataGridView中有一列是ComBox类型的列,请问我怎么在程序中向这一列中赋值呢?例如下面的代码所示:intdataGridViewRowNumber=(int)dataGridView1.Rows.Count;//for(inti=0;i<dataGridViewRowNumber;i++){dataGridView1.Rows[i].Cells[2].Value="想在Combox列中显示的值";}但是像上面的这种赋值方式会出现错误,请大家帮忙出出主意,谢

我在程序中把数据导出到excel存放在服务器,用户不用下载excel而直接打印,怎么做呢?

问题描述 我在程序中把数据导出到excel存放在服务器,用户不用下载excel而直接打印,怎么做呢? 解决方案 解决方案二:可以网上google代码或者用第三方控件客户不下载就直接打印好像比较难解决方案三:DLL一定要加的那在服务器打开Excel,我也做过,不过没成功,本机好用上传之后不好用了,希望你能够解决

mfc listbox-MFC-LISTBOX列表框如何在程序中自选多项呢,不用鼠标点击选择

问题描述 MFC-LISTBOX列表框如何在程序中自选多项呢,不用鼠标点击选择 我setcuesel(0)为什么没有反应呢,我想点击某个按钮时自选固定的某几项,应该怎么写呢 解决方案 属性里有个,selectemode,你把它设置成multiextended就可以了

让你提前认识软件开发(21):C程序中的定时器

第1部分 重新认识C语言 C程序中的定时器   [文章摘要]         在实际的C程序中,一个模块执行多个操作是很常见的事情.如果多个操作同时进行,会出现程序效率低下.计算机CPU占用率过高等情况,这时就需要对所有操作的执行顺序作一个合理的安排,这就涉及到定时器的使用.         本文对C程序中的定时器的类型.设置和清除方法等作了详细的介绍,为相关开发工作的开展提供了参考. [关键词]         C程序  定时器  操作  开发   一.定时器的定义及分类         我们

讲解C++中的枚举类型以及声明新类型的方法_C 语言

C++枚举类型如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内.声明枚举类型用enum开头.例如: enum weekday{sun, mon, tue, wed, thu, fri, sat}; 上面声明了一个枚举类型weekday,花括号中sun, mon, -, sat等称为枚举元素或枚举常量.表示这个类型的变量的值只能是以上7个值之一.它们是用户自己定义的标识符. 声明枚举类型