wchar_t引发的思考

摘要:
思考是由wchar_ T产生的,为什么要使用wchar_?Char是一个字节,wchar_T是2字节或4字节。并且wchar_Twc=L“I”;这是utf-16代码(以vs表示)。高位代码基本上是无用的。16位代码与unicode代码一致。将utf-8编码的unicode字符集放入wchar_ T中是不明智的,因为这样一来,wchar_ T中可能有两个字符代码,或者一个,或者少于一个,或两个半。

思考是由wchar_t引发的,干嘛要用wchar_t?我用char[]可以顺利的输出汉字啊!
char是一个字节,wchar_t是2个字节或者4个字节的。

1.unicode字符集

一开始概念很混乱,发了几个帖子,和别人讨论了几天,自己理顺了下概念。我简单用我的话概括一下:
unicode字符集,什么是字符集,字符集就是一个映射表计算机通过它找到对应的字符;unicode的把全球所有文字都做了映射。
utf-8、utf-16、utf-32都是编码方式,各自实现各自的方便。

utf-8来说利于传输因为它是变长的,有一个字节的(ascii在utf-8中都只占一个字节并且是一致的),俩的,三个的。
有一个传输出错不会影响其他的。如果是固定长度的多字节编码,少一个字节后面的往前补上,所有的字符编码都变了,都成乱码了。
另一个utf-8的好处是字符编码的每个字节都不会是0000h,这样strlen得到的是正确大小,而utf-16和utf-32,如果用char字符串的话,则会有0000h(标志结束位)在字符串的非真正结束的地方存在(如果用wchar_t专用的的方法处理就会避免这些问题)。
utf-16和unicode的编码是一样的。

字符集和实际编码的联系:因为每个字符和其字符集中的16位二进制码值是一一对应的,实际编码只有转换成相应的字符集对应的16位的unicode码才能知道它代表哪个字符。关于utf-8和unicode的转换可以自己搜一下,这里就不说了,我也没自仔细看。

2.wchar_t                                                                                                                                              

wchar_t正好可以放一个unicode字符,正好就可以轻易的让它与要显示的字符对应,也可以用他转成想要的其他形式的编码。而如果用char的话,它只有8位,只能一次处理8位的数据,如果将char原封不动的输出,那用它可以。(用char字符串去做转换,那可就麻烦了,还要不断的和前后的char做判断)。java中char都是2个字节的。

一般在程序中用unicode(utf-16),输出到文本中都是utf-8,所以输出前要转码。

char *c="我";c字符串的值,一般是utf-8,具体要看你文本编辑器的编码格式。
而wchar_t wc=L"我";这个是utf-16码(vs中)。linux中由于wchar_t是4个字节,这个编码就成了utf-32了。高位基本没用,16位和unicode编码一致(linux下没测试,知道linux下wchar_t是32位,还有utf-32和utf-16低位是一致的)。

将utf-8编码的unicode字符集放入wchar_t中是不明智的,因为,这样wchar_t中可能有两个字符的编码,也可能有一个,也可能不到一个,也可能2个半个。

3.其他细节                                                                                                                                          

其他关于UNICODE的字符编具体细节,如utf-8的bom头,字符序Big Endian、Little Endian等情况可自行查阅资料,我感觉,那些都不是很重要需要的时候查阅就可以,理解概念最关键。

write by fgd << "如有转载请注明出处cnblogs.com/wendao"

免责声明:文章转载自《wchar_t引发的思考》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何查看手机电量消耗是否正常?IDEA 从Windows 过渡到Mac 必备快捷键对照下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

二维码(QR code)基本知识

1.二维码定义:   二维码(2-Dimensional Bar Code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。它是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图案表示二进制数据,被设备扫描后可获取其中所包含的信息。一维条码的宽度记载着数据,而其长度没有记载数据。二维条码的长度、...

使用 Windows 窗体 TextBox 控件创建密码文本框

密码框是一种 Windows 窗体文本框,它在用户键入字符串时显示占位符。 创建密码文本框 将 TextBox 控件的 PasswordChar 属性设置为某个特定字符。 PasswordChar 属性指定在文本框中显示的字符。 例如,如果希望在密码框中显示星号,请在“属性”窗口中将 PasswordChar 属性指定为“*”。 然后,无论用户...

Shell字符串

1.字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的; 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。 双引号的优点: 双引号里可以有...

H.264基本原理与编码流程

H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264以及ffmpeg等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使用H264的成本。 但为了用好H264,我们还是要对H264的基本原理弄清楚才行。今天我们就来看看H264的基本原理。 H264概述 H264压缩技术主要采用...

CP936实际上是GBK,编码问题再次让我熬夜

CP936和UTF-8与巨蟒无关。编码问题再次让我熬夜。CP936实际上是GBK。当IBM发明代码页时,把GBK放在了第936页,所以它被称为CP936。至于GBK,《百度百科全书》明确表示:GBK是《汉字内码扩展规范》 (GBK是“国家标准”和“扩展”汉语拼音的第一个字母,英文的名字是汉语内部编码规范)。中华人民共和国国家信息技术标准化技术委员会于199...

Oracle 时间差计算

两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒): 天: ROUND(TO_NUMBER(END_DATE - START_DATE)) 小时: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24) 分钟: ROUND(TO_NUMBER(END_DA...