第一个是普通的汉字字符集,也就是说,如果一个字节的最高位如果为1,则是个双字节字符,例如汉字,如果不为1则是单字节字符,而第二个使用wcscpy,则把他映射到unicode字符集,无论什么字符都是双字节,这两个值当然不一样。
以下是windows核心编程对unicode的解释
U n i c o d e是A p p l e和X e r o x公司于1 9 8 8年建立的一个技术标准。1 9 9
1年,成立了一个集团机
构负责U n i c o d e的开发和推广应用。该集团由A p p l e、C o m p a q、H P、I
B M、M i c r o s o f t、O r a c l e、
Silicon Graphics, Inc.、S y b a s e、U n i s y s和X e r o x等公司组成(若要
了解该集团的全部成员,请
通过网址w w w. U n i c o d e . o rg查找)。该集团负责维护U n i c o d e标准。
U n i c o d e的完整描述可以参阅
A d d i s o n We s l e y出版的《Unicode Standard》一书(该书可以通过网址w w
w. U n i c o d e . o rg订购)。
U n i c o d e提供了一种简单而又一致的表示字符串的方法。U n i c o d e字符串中
的所有字符都是
1 6位的(两个字节)。它没有专门的字节来指明下一个字节是属于同一个字符的组成
部分,还
是一个新字符。这意味着你只需要对指针进行递增或递减,就可以遍历字符串中的各个
字符,
不再需要调用C h a r N e x t、C h a r P r e v和I s D B C S L e a d B y t e之
类的函数。
由于U n i c o d e用一个1 6位的值来表示每个字符,因此总共可以得到65 000个字
符,这样,
它就能够对世界各国的书面文字中的所有字符进行编码,远远超过了单字节字符集的2
5 6个字
符的数目。
目前,已经为阿拉伯文、中文拼音、西里尔字母(俄文)、希腊文、西伯莱文、日文、
韩
文和拉丁文(英文)字母定义了U n i c o d e代码点。这些字符集中还包含了大量的
标点符号、
数学符号、技术符号、箭头、装饰标志、区分标志和其他许多字符。如果将所有这些字
母和符
号加在一起,总计约达3 5 0 0 0个不同的代码点,这样,总计65 000多个代码点中,
大约还有一
半可供将来扩充时使用。
这65 536个字符可以分成不同的区域。表2-2 显示了这样的区域的一部分以及分配给这
些
区域的字符。
表2-2 区域字符
1 6位代码字符16 位代码字符
0 0 0 0 - 0 0 7 F A S C I I 0 3 0 0 - 0 3 6 F 通用区分标志
0 0 8 0 - 0 0 F F 拉丁文1字符0 4 0 0 - 0 4 F F 西里尔字母
0 1 0 0 - 0 1 7 F 欧洲拉丁文 0 5 3 0 - 0 5 8 F 亚美尼亚文
0 1 8 0 - 0 1 F F 扩充拉丁文 0 5 9 0 - 0 5 F F 西伯莱文
0 2 5 0 - 0 2 A F 标准拼音 0 6 0 0 - 0 6 F F 阿拉伯文
0 2 B 0 - 0 2 F F 修改型字母 0 9 0 0 - 0 9 7 F 梵文
目前尚未分配的代码点大约还有29 000个,不过它们是保留供将来使用的。另外,大约
有
6 0 0 0个代码点是保留供个人使用的。
代码点是字符集中符号的位置。我像你应该清楚了,就算是一个原来的ascii字符,映射为unicode,都会成为双字节,但值好像没变,只是扩展出了高字节为0x00,而其他字符集都是规定好的放在哪一段内。
以下是windows核心编程对unicode的解释
U n i c o d e是A p p l e和X e r o x公司于1 9 8 8年建立的一个技术标准。1 9 9
1年,成立了一个集团机
构负责U n i c o d e的开发和推广应用。该集团由A p p l e、C o m p a q、H P、I
B M、M i c r o s o f t、O r a c l e、
Silicon Graphics, Inc.、S y b a s e、U n i s y s和X e r o x等公司组成(若要
了解该集团的全部成员,请
通过网址w w w. U n i c o d e . o rg查找)。该集团负责维护U n i c o d e标准。
U n i c o d e的完整描述可以参阅
A d d i s o n We s l e y出版的《Unicode Standard》一书(该书可以通过网址w w
w. U n i c o d e . o rg订购)。
U n i c o d e提供了一种简单而又一致的表示字符串的方法。U n i c o d e字符串中
的所有字符都是
1 6位的(两个字节)。它没有专门的字节来指明下一个字节是属于同一个字符的组成
部分,还
是一个新字符。这意味着你只需要对指针进行递增或递减,就可以遍历字符串中的各个
字符,
不再需要调用C h a r N e x t、C h a r P r e v和I s D B C S L e a d B y t e之
类的函数。
由于U n i c o d e用一个1 6位的值来表示每个字符,因此总共可以得到65 000个字
符,这样,
它就能够对世界各国的书面文字中的所有字符进行编码,远远超过了单字节字符集的2
5 6个字
符的数目。
目前,已经为阿拉伯文、中文拼音、西里尔字母(俄文)、希腊文、西伯莱文、日文、
韩
文和拉丁文(英文)字母定义了U n i c o d e代码点。这些字符集中还包含了大量的
标点符号、
数学符号、技术符号、箭头、装饰标志、区分标志和其他许多字符。如果将所有这些字
母和符
号加在一起,总计约达3 5 0 0 0个不同的代码点,这样,总计65 000多个代码点中,
大约还有一
半可供将来扩充时使用。
这65 536个字符可以分成不同的区域。表2-2 显示了这样的区域的一部分以及分配给这
些
区域的字符。
表2-2 区域字符
1 6位代码字符16 位代码字符
0 0 0 0 - 0 0 7 F A S C I I 0 3 0 0 - 0 3 6 F 通用区分标志
0 0 8 0 - 0 0 F F 拉丁文1字符0 4 0 0 - 0 4 F F 西里尔字母
0 1 0 0 - 0 1 7 F 欧洲拉丁文 0 5 3 0 - 0 5 8 F 亚美尼亚文
0 1 8 0 - 0 1 F F 扩充拉丁文 0 5 9 0 - 0 5 F F 西伯莱文
0 2 5 0 - 0 2 A F 标准拼音 0 6 0 0 - 0 6 F F 阿拉伯文
0 2 B 0 - 0 2 F F 修改型字母 0 9 0 0 - 0 9 7 F 梵文
目前尚未分配的代码点大约还有29 000个,不过它们是保留供将来使用的。另外,大约
有
6 0 0 0个代码点是保留供个人使用的。
代码点是字符集中符号的位置。我像你应该清楚了,就算是一个原来的ascii字符,映射为unicode,都会成为双字节,但值好像没变,只是扩展出了高字节为0x00,而其他字符集都是规定好的放在哪一段内。
解决方案 »
- 类的问题
- 高分急请教!如何编程实现vc读取excel文件中的查找功能????
- socket接收的时候会有数据交叉的情况发生吗?
- 看一下哪种方法比较好?
- 为什么编译时总说未定义
- 为什么我用CreatePopupMenu函数建立的菜单在WindowProc函数中收到的WM_MENUSELECT消息的wParam参数值老是:-65536
- 我的xp为什么越来越慢?
- 我编了一个 bmp 转成 GIF 的程序,现在出了问题,谁帮我看看,我把原码Mail 给你,我的 Mail:[email protected]
- 做为程序员,不会盲打怎么办??
- Visual C++.NET
- 怎样保存project的设置?
- 一定要帮帮我啊!!!如何用tagMsg结构中的WPARAM判断生成哪个键的WM_CHAR消息,
"你"和 L"您"的编码是不一样的。一个是GB码,一个是UNICODE码。
除了不一样外,没什么关系。
现在大陆正在考虑统一编码的问题,统一后就不会有这种问题了。
没有这许许多多的编码,哪有这么难学的C++,嗨!
atoc atoi ecvt fcvt strtod wcstol.......
更讨厌的是:号称OOP的VC里有关图像的函数有100多个,可是没一个能直接实现PHOTOSHOP的菜单里的一个简单特效!!!
嗨!!
我想你理解错了,我没有说在unicode中有gb等,这两个就不是一种编码,我说的普通双字节内码和unicode不是一回事,普通双字节内码有很多编码方式,包括gb等。