关于Unicode和ASCII码的问题,多谢

wjohenw 2004-08-04 09:35:14
1.ASCII码到底是什么东西?中文的ASCII是怎么回事?

2.Unicode是怎么回事?3的Unicode码怎么是"3100", 中文的Unicode又是怎么回事?

3.Unicode和ASCII码的的区别
...全文
293 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
RockHwnd 2004-08-06
mark
回复
changlele 2004-08-06
建议你看《Windows核心编程》
回复
Kudeet 2004-08-04
以前的帖子好多
http://search.csdn.net/Expert/topic/2426/2426428.xml?temp=.343136
http://search.csdn.net/Expert/topic/1603/1603099.xml?temp=.8472864
回复
Kudeet 2004-08-04
UNICODE 简介
如果你编写的程序是针对非英语国家的用户,如中国、日本、东欧和中东地区,
那么你一定要熟悉 UNICODE 字符集。尤其是用 Visual C++/MFC 编写针对上述
国家和地区的用户的程序时,如果你想让自己的应用程序得到更广泛的用户,那
么必须考虑代码 UNICODE 的兼容性,也就是说它既在 ASCII 模式下运行 ,也
能在UNICODE 模式下运行。本文将介绍 UNICODE 的一些基本编程知识,澄清很
多人(包括我自己)在这个问题上存在的模糊认识。对于任何使用 Visual C++
和/或 MFC 编程的人来说,这篇文章肯定值得一读。

UNICODE到底是什么?

UNICODE是目前用来解决ASCII码256个字符限制问题的一种比较流行的解决方案。
大家知道,ASCII 字符集只有256个字符,用 0-255 之间的数字来表示。包括大
小写字母、数字以及少数特殊字符;如标点符号、货币符号等。对于大多数拉丁
语言来说,这些字符已经够用。但是,许多亚洲和东方语言所用的字符远远不止
256个字符。有些超过千个。人们为了突破 ASCII 码字符数的限制,试图用一种
简单的方法来针对超过256个字符的语言编写计算机程序。于是 UNICODE 应运而
生。UNICODE 通过用双字节来表示一个字符,从而在更大范围内将数字代码映射
到多种语言的字符集。
回复
无敌魔仙 2004-08-04
你要不要,我有这本书

随着M i c r o s o f t公司的Wi n d o w s操作系统在全世界日益广泛的流行,对于软件开发人员来说,
将目标瞄准国际上的各个不同市场,已经成为一个越来越重要的问题。美国的软件版本比国际
版本提前6个月推向市场,这曾经是个司空见惯的现象。但是,由于各国对Wi n d o w s操作系统
提供了越来越多的支持,因此就更加容易为国际市场生产各种应用软件,从而缩短了软件的美
国版本与国际版本推出的时间间隔。
Wi n d o w s操作系统始终不逾地提供各种支持,以帮助软件开发人员进行应用程序的本地化
工作。应用软件可以从各种不同的函数中获得特定国家的信息,并可观察控制面板的设置,以
确定用户的首选项。Wi n d o w s甚至支持不同的字体,以适应应用的需要。
之所以将这一章放在本书的开头,是因为考虑到U n i c o d e是开发任何应用程序时要采用的
基本步骤。本书的每一章中几乎都要讲到关于U n i c o d e的问题,而且书中给出的所有示例应用
程序都是“用U n i c o d e实现的”。如果你为Microsoft Windows 2000或Microsoft Windows CE开发
应用程序,你应该使用U n i c o d e进行开发。如果你为Microsoft Windows 98开发应用程序,你必
须对某些问题作出决定。本章也要讲述Windows 98的有关问题。
2.1 字符集
软件的本地化要解决的真正问题,实际上就是如何来处理不同的字符集。多年来,许多人
一直将文本串作为一系列单字节字符来进行编码,并在结尾处放上一个零。对于我们来说,这
已经成了习惯。当调用s t r l e n函数时,它在以0结尾的单字节字符数组中返回字符的数目。
问题是,有些文字和书写规则(比如日文中的汉字就是个典型的例子)的字符集中的符号
太多了,因此单字节(它提供的符号最多不能超过2 5 6个)是根本不敷使用的。为此出现了双
字节字符集(D B C S),以支持这些文字和书写规则。
2.1.1 单字节与双字节字符集
在双字节字符集中,字符串中的每个字符可以包含一个字节或包含两个字节。例如,日文
中的汉字,如果第一个字符在0 x 8 1与0 x 9 F之间,或者在0 x E 0与0 x F C之间,那么就必须观察下
一个字节,才能确定字符串中的这个完整的字符。使用双字节字符集,对于程序员来说简直是
个很大的难题,因为有些字符只有一个字节宽,而有些字符则是两个字节宽。
如果只是调用s t r l e n函数,那么你无法真正了解字符串中究竟有多少字符,它只能告诉你
到达结尾的0之前有多少个字节。A N S I的C运行期库中没有配备相应的函数,使你能够对双字
节字符集进行操作。但是, Microsoft Visual C++的运行期库却包含许多函数,如_ m b s l e n ,它可
以用来操作多字节(既包括单字节也包括双字节)字符串。
为了帮助你对D B C S字符串进行操作,Wi n d o w s提供了下面的一组帮助函数(见表2 - 1 )。
前两个函数CharNext 和Char Prev 允许前向或逆向遍历DBCS 字符串,方法是每次一个字
符。第三个函数IsDBCSLeadByte, 在字节返回到一个两字字节符的第一个字节时将返回
T R U E。
表2-1 对D B C S字符串进行操作的帮助函数
函数描述
PTSTR CharNext(PCTSTR pszCurrentChar); 返回字符串中的下一个字符的地址
PTSTR CharPrev(PCTSTR pszStart,PCTSTR 返回字符串中的上一个字符的地址
p s z C u r r e n t C h a r );
BOOL IsDBCSLeadByteTRUE(BYTE bTestChar); 如果该字节是DBCS字符的第一个字节,则返回
尽管这些函数使得我们对D B C S的操作更容易,但还需要,一个更好的方法让我们来看
看U n i c o d e。
2.1.2 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个代码点是保留供个人使用的。
12计计第一部分程序员必读
下载
代码点是字符集中符号的位置。
2.2 为什么使用U n i c o d e
当开发应用程序时,当然应该考虑利用U n i c o d e的优点。即使现在你不打算对应用程序进
行本地化,开发时将U n i c o d e放在心上,肯定可以简化将来的代码转换工作。此外, U n i c o d e还
具备下列功能:
• 可以很容易地在不同语言之间进行数据交换。
• 使你能够分配支持所有语言的单个二进制. e x e文件或D L L文件。
• 提高应用程序的运行效率(本章后面还要详细介绍)。
回复
holyeagle 2004-08-04
可以看一下windows核心编程的第二章,有详细的说明
回复
wjohenw 2004-08-04
4.是否每个汉字或字母都对应唯一的Unicode和ASCII码呢?
回复
tangshiping 2004-08-04
引................别说得太复杂,其实就一句话,本来是一个字节(8bit)来表示一个字符(这对老美够用了,但对中国之类的国家显然不够用,所以只能用两个字符来表示实际上的一个字符),现在为了简单起见,一律用2个字节来表示一个字符,这就是Unicode.
3000年,火星人来了,他们的文字更复杂,得用4个字节表示一个字符,于是地球人跟火星人协商,决定采用新的字符标准-doubleUnicode(32bit)-来统一太阳系内的字符编码.
....经典,呵呵
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-04 09:35
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……