大家好!今天让小编来大家介绍下关于unicode编码(什么是Unicode码它由几个字节组成)的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。
文章目录列表:
后两者的字符在16位 Unicode 编码空间中的编码第一字节各位全为0,可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式,本文目录什么是Unicode码它由几个字节组成什么是unicode编码MFC中如何将一个字符串中的UNICODE编码转换什么是Unicode码它由几个字节组成Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码,一个字符的 Unicode 编码是确定的,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码,MS Word 也会将光标前面的字符同其十六进制的四位 Unicode 编码进行互相转换,如果每个字符都使用2字节的原 Unicode 编码传输,输入 0 和某个字符的 Unicode 编码(十进制)。
本文目录
什么是Unicode码它由几个字节组成
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。2006年6月的最新版本的 Unicode 是 2005年3月31日推出的Unicode 4.1.0 。另外,5.0 Beta已于2005年12月12日推出,以供各会员评价。Unicode 的编码和实现大概来说,Unicode 编码系统可分为编码方式和实现方式两个层次。1.编码方式Unicode 的编码方式与 ISO 10646 的通用字元集(亦称)(Universal Character Set,UCS)概念相对应,目前的用于实用的 Unicode 版本对应于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示 216 个字符。基本满足各种语言的使用。实际上目前版本的 Unicode 尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。上述16位 Unicode 字符构成基本多文种平面(Basic Multilingual Plane, 简称 BMP)。最新(但未实际广泛使用)的 Unicode 版本定义了16个辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。但事实上辅助平面字符仍然占用4字节编码空间,与 UCS-4 保持一致。未来版本会扩充到 ISO 10646-1 实现级别3,即涵盖 UCS-4 的所有字符。UCS-4 是一个更大的尚未填充完全的31位字符集,加上恒为0的首位,共需占据32位,即4字节。理论上最多能表示 231 个字符,完全可以涵盖一切语言所用的符号。BMP 字符的 Unicode 编码表示为 U+hhhh,其中每个 h 代表一个十六进制数位。与 UCS-2 编码完全相同。对应的4字节 UCS-4 编码后两个字节一致,前两个字节的所有位均为0。2.实现方式Unicode 的实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同。Unicode 的实现方式称为Unicode转换格式(Unicode Translation Format,简称为 UTF)。例如,如果一个仅包含基本7位ASCII字符的 Unicode 文件,如果每个字符都使用2字节的原 Unicode 编码传输,其第一字节的8位始终为0。这就造成了比较大的浪费。对于这种情况,可以使用 UTF-8 编码,这是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他 Unicode 字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为0或1进行识别。这样对以7位ASCII字符为主的西文文档就大大节省了编码长度(具体方案参见UTF-8)。类似的,对未来会出现的需要4个字节的辅助平面字符和其他 UCS-4 扩充字符,2字节编码的 UTF-16 也需要通过一定的算法进行转换。再如,如果直接使用与 Unicode 编码一致(仅限于 BMP 字符)的 UTF-16 编码,由于每个址 加昧肆礁鲎纸冢赣acintosh机和PC机上对字节顺序的理解是不一致的。这时同一字节流可能会被解释为不同内容,如编码为 U+594E 的字符“奎”同编码为 U+4E59 的“乙”就可能发生混淆。于是在 UTF-16 编码实现方式中使用了大尾序(big-endian)、小尾序(little-endian)的概念,以及BOM(Byte Order Mark)解决方案。(具体方案参见UTF-16)此外 Unicode 的实现方式还包括 UTF-7、Punycode、CESU-8、SCSU、UTF-32等,这些实现方式有些仅在一定的国家和地区使用,有些则属于未来的规划方式。目前通用的实现方式是 UTF-16小尾序(BOM)、UTF-16大尾序(BOM)和 UTF-8。在微软公司Windows XP操作系统附带的记事本中,“另存为”对话框可以选择的四种编码方式除去非 Unicode 编码的 ANSI 外,其余三种“Unicode”、“Unicode big endian”和“UTF-8”即分别对应这三种实现方式。目前辅助平面的工作主要集中在第二和第三平面的中日韩统一表意文字中,因此包括GBK、GB18030、Big5等简体中文、正体中文、日文、韩语以及越南字喃的各种编码与 Unicode 的协调性被重点关注。考虑到 Unicode 最终要涵盖所有的字符,从某种意义而言,这些编码方式也可视作 Unicode 的出现于其之前的既成事实的实现方式,如同ASCII及其扩展Latin-1一样,后两者的字符在16位 Unicode 编码空间中的编码第一字节各位全为0,第二字节编码与原编码完全一致。但上述东亚语言编码与 Unicode 编码的对应关系要复杂得多。非 Unicode 环境在非 Unicode 环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页(Codepage)转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码。可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式,如936为简体中文GBK,950为正体中文Big5(皆指PC上使用的)。在这种情况下,一些非英语的欧洲语言编写的软件和文档很可能出现乱码。而将代码页设置为相应语言中文处理又会出现问题,这一情况无法避免。从根本上说,完全采用统一编码才是解决之道,但目前上无法做到这一点。代码页技术现在广泛为各种平台所采用。UTF-7 的代码页是65000,UTF-8 的代码页是65001。XML 和 UnicodeXML及其子集HTML采用UTF-8作为标准字集,理论上我们可以在各种支持XML标准的浏览器上显示任何地区文字的网页,只要电脑本身安装有合适的字体即可。可以利用nnn;的格式显示特定的字符。nnn代表该字符的十进制 Unicode 代码。如果采用十六进制代码,在编码之前加上x字符即可。但部分旧版本的浏览器可能无法识别十六进制代码。然而部分由于 Unicode 版本发展原因,很多浏览器只能显示 UCS-2 完整字符集也即现在使用的 Unicode 版本中的一个小子集。下表可以检验您的浏览器怎样显示各种各样的 Unicode 代码:代码 字符标准名称 (英语) 在浏览器上的显示A 大写拉丁字母"A" Aß 小写拉丁字母"Sharp S" ßþ 小写拉丁字母"Thorn" þΔ 大写希腊字母"Delta" ΔЙ 大写斯拉夫字母"Short I" Йק 希伯来字母"Qof" ק م 阿拉伯字母 "Meem" م๗ 泰文数字 7 ๗ቐ 埃塞俄比亚音节文字"Qha" ቐあ 日语平假名 "A" あア 日语片假名 "A" ア叶 简体汉字 "叶" 叶叶 繁体汉字 "叶" 叶엽 韩国音节文字 " Yeob" 엽输入Unicode除了输入法外,操作系统会提供几种方法输入Unicode。像是Windows 2000之后的Windows系统就提供一个可点击的表。例如在Microsoft Word之下,按下 Alt 键不放,输入 0 和某个字符的 Unicode 编码(十进制),再松开 Alt 键即可得到该字符,如Alt + 033865会得到Unicode字符叶。另外按Alt + X 组合键,MS Word 也会将光标前面的字符同其十六进制的四位 Unicode 编码进行互相转换。Unicode 编码表0000-0FFF 8000-8FFF 10000-10FFF 20000-20FFF 28000-28FFF1000-1FFF 9000-9FFF 21000-21FFF 29000-29FFF2000-2FFF A000-AFFF 22000-22FFF 2A000-2AFFF3000-3FFF B000-BFFF 23000-23FFF 4000-4FFF C000-CFFF 1D000-1DFFF 24000-24FFF 2F000-2FFFF5000-5FFF D000-DFFF 25000-25FFF 6000-6FFF E000-EFFF 26000-26FFF 7000-7FFF F000-FFFF 27000-27FFF E0000-E0FFFUnicode 目前已经有5.0版本。世界上有一大批计算机、语言学等科学家专门研究Unicode,到了现在Unicode标准已经不单是一个编码标准,还是记录人类语言文字资料的一个巨大的数据库,同时从事人类文化遗产的发掘和保护工作。对于中文而言,Unicode 16编码里面已经包含了GB18030里面的所有汉字(27484个字),目前Unicode标准准备把康熙字典的所有汉字放入到Unicode 32bit编码中。简单地说,Unicode扩展自ASCII字元集。在严格的ASCII中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而 Unicode使用全16位元字元集。这使得Unicode能够表示世界上所有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。Unicode 最初打算作为ASCII的补充,可能的话,最终将代替它。考虑到ASCII是电脑中最具支配地位的标准,所以这的确是一个很高的目标。Unicode影响到了电脑工业的每个部分,但也许会对作业系统和程式设计语言的影响最大。从这方面来看,我们已经上路了。Windows NT从底层支援Unicode(不幸的是,Windows 98只是小部分支援Unicode)。先天即被ANSI束缚的C程式设计语言通过对宽字元集的支援来支援Unicode。自然,作为程式写作者,我们通常会面对许多繁重的工作。我已试图透过使本书中的所有程式「Unicode化」来减轻负担。其含义会随著本章对Unicode的讨论而清晰起来。
什么是unicode编码
世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode,就像它的名字都表示的,这是一种所有符号的编码。历史上存在两个试图独立设计 Unicode 的组织,即国际标准化组织(ISO)和一个软件制造商的协会(unicode.org)。ISO 开发了 ISO 10646 项目,Unicode 协会开发了 Unicode 项目。在1991年前后,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从 Unicode2.0 开始,Unicode 项目采用了与 ISO 10646-1 相同的字库和字码。目前两个项目仍都存在,并独立地公布各自的标准。Unicode 协会现在的最新版本是2005年的 Unicode 4.1.0。ISO 的最新标准是 10646-3:2003。Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E00表示汉字"一"。具体的符号对应表,可以查询 unicode.org,或者专门的汉字对应表。 Unicode的问题需要注意的是,Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。比如,汉字"一"的 unicode 是十六进制数4E00,转换成二进制数足足有15位(100111000000000),也就是说这个符号的表示至少需要2个字节。而表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。这里就有两个的问题,一个是,如何才能区别 unicode 和 ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费,文本文件的大小会因此大出二三倍,这是难以接受的。它们造成的直接结果是:出现了unicode 的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示 unicode 。另外 unicode 在很长一段时间内无法推广,直到互联网的出现。网络上流行的utf-8就是unicode编码的一类应用.如何查询 Unicode 编码在 Windows 系统下,你可以在运行栏输入 "eudcedit.exe" 调用 TrueType 造字程序,在其中的窗口--参照页,在"代码"栏输入 Unicode 编码可以查找到相应的字符;在"形状"栏输入字符则可以查找到相应的 Unicode 编码 。
MFC中如何将一个字符串中的UNICODE编码转换
1. 在Project-》C/C++-》Preprocessor definitions 中去除_MBCS, 增加_UNICODE2. 在Project-》Link-》Category-》Output-》Entry-point symbol处增加wWinMainCRTStartup3. 拷贝3个文件到工程所在目录:mfc42u.lib, mfcs42u.lib, atlthunk.lib (WINDDK中就有,或者直接指定这三个文件的路径, 否则会link失败)4. 数据类型 说明a) WCHAR Unicode字符b) PWSTR 指向Unicode字符串的指针c) PCWSTR 指向一个恒定的Unicode字符串的指针d) 对应的ANSI数据类型为CHAR,LPSTR和LPCSTRe) ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR5. 操作说明a) ANSI 操作函数以str开头 strcpyb) Unicode 操作函数以wcs开头 wcscpyc) MBCS 操作函数以_mbs开头 _mbscpyd) ANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库),如_tcscpy,_tcscat, _tcscmp, _tcschr (查找字串),e) ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)6. 字符集说明a) Unicode L“string”b) ANSI “string”c) ANSI/Unicode T(“string”)或_TEXT(“string”)if(szError==_TEXT(‘J’) ){ }7. UNICODE 转换成ANSIunsigned short * unicode; int size= WideCharToMultiByte(CP_ACP,0,unicode,-1, NULL, 0, NULL,0);char * ansi=new char;WideCharToMultiByte(CP_ACP,0,unicode,-1, ansi, NULL, 0);8. ANSI 转换成UNICODECString ansi;DWORD dwNum;dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, NULL, 0);wchar_t *pwText = new wchar_t;;MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, pwText, dwNum);9. 判断如果文本文件的开头两个字节是0xFF和0xFE,那幺就是Unicode,否则是ANSI
以上就是小编对于unicode编码(什么是Unicode码它由几个字节组成)问题和相关问题的解答了,unicode编码(什么是Unicode码它由几个字节组成)的问题希望对你有用!