002集——统一码(Unicode)及ASCII码详解

本文介绍了Unicode编码标准,如何为全球各种语言提供统一的字符编码,以及UTF-8、UTF-16和UTF-32等编码方式的应用,对比了ASCII和UTF-8在字符表示上的差异,强调了Unicode在解决字符编码冲突和跨平台支持中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        统一码(Unicode),它也叫万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

        如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。

在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容,这就是Unicode的最大好处。就是将世界上所有的文字用2个字节统一进行编码。那样,像这样统一编码,2个字节就已经足够容纳世界上所有的语言的大部分文字了。

下图所示软件可以查看文件数据的存储方式:

Universal Multiple-Octet Coded Character Set,简称为UCS。

现在用的是UCS-2,即2个字节编码,而UCS-4是为了防止将来2个字节不够用才开发的。

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

Unicode是一种通用的字符编码标准,旨在为世界上所有脚本和语言中的每个字符提供一个唯一的数值标识,称为代码点(code point)。它包含了几乎所有已知的语言、符号、标点符号、技术符号等字符。

Unicode的目标是解决以前存在的字符编码问题,因为不同的编码方案之间存在互不兼容的情况。在过去,不同的编码标准(如ASCII、ISO 8859等)只能表示特定范围的字符,无法满足全球范围内的字符需求。

Unicode使用十六进制数值表示每个字符的代码点,例如,拉丁字母大写字母'A'的代码点是U+0041,希腊字母大写字母'Ω'的代码点是U+03A9。Unicode标准定义了超过143,000个已分配的代码点,其中包括各种文字系统,如拉丁字母、希腊字母、西里尔字母、中日韩汉字、象形文字等。

为了在计算机中表示和处理Unicode字符,需要使用不同的编码方案,如UTF-8、UTF-16和UTF-32。这些编码方案允许以字节或代码单元序列的形式表示Unicode字符。

UTF-8是最常用的Unicode编码方案之一,广泛应用于互联网。它使用可变长度编码,使用1到4个字节来表示字符。UTF-8与ASCII兼容,对于ASCII字符,使用一个字节表示,可以确保向后兼容。

UTF-16是另一种常见的Unicode编码方案,使用16位(2字节)代码单元表示字符。它可以直接表示位于基本多文种平面(BMP)内的字符,但需要使用代理对(surrogate pair)的代码单元表示超出BMP范围的字符。

UTF-32(也称为UCS-4)是一种固定长度编码方案,使用32位(4字节)代码单元直接表示每个Unicode字符。UTF-32在处理和操作文本时更为简单,但相比于UTF-8和UTF-16,它需要更多的存储空间。

Unicode的使用使得不同语言和脚本之间的文本交互变得更加容易和可靠。它在操作系统、编程语言、数据库、文本处理工具和各种应用程序中得到广泛支持,确保了全球范围内的多语言和国际化支持。

 编码方式

        在Unicode中:汉字"字"对应的数字是23383。在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8UTF-16UTF-32。UTF是"UCS Transformation Format"的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,"汉字"对应的数字是0x6c49和0x5b57,而编码的程序数据是:

BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8编码

WORD data_utf16[] = {0x6c49, 0x5b57}; // UTF-16编码

DWORD data_utf32[] = {0x6c49, 0x5b57}; // UTF-32编码

这里用BYTE、WORD、DWORD分别表示无符号8位整数,无符号16位整数和无符号32位整数。UTF-8、UTF-16、UTF-32分别以BYTE、WORD、DWORD作为编码单位。"汉字"的UTF-8编码需要6个字节。"汉字"的UTF-16编码需要两个WORD,大小是4个字节。"汉字"的UTF-32编码需要两个DWORD,大小是8个字节。根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。

UTF-8

UTF-8以字节为单位对Unicode进行编码。从Unicode到UTF-8的编码方式如下:

Unicode编码(十六进制)║UTF-8字节流(二进制)

F ║0xxxxxxxx║110xxxxx 10xxxxxx║1110xxxx 10xxxxxx 10xxx10xxxx║11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

计算机只是处理数字。它们指定一个数字,来储存字母或其他字符。在创造Unicode之前,有数百种指定这些数字的编码系统。没有一个编码可以包含足够的字符:例如,单单欧州共同体就需要好几种不同的编码来包括所有的语言。即使是单一种语言,例如英语,也没有哪一个编码可以适用于所有的字母,标点符号,和常用的技术符号。这些编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同的字符,或使用不同的数字代表相同的字符。任何一台特定的计算机(特别是服务器)都需要支持许多不同的编码,但是,不论什么时候数据通过不同的编码或平台之间,那些数据总会有损坏的危险。

ASCII码

大多数计算机采用ASCII码(美国标准信息交换码),它是表示所有大小写字母、数字、标点符号和控制字符的7位编码方案。统一码(Unicode)包含ASCII码,'\\u0000'到'\\u007F'对应全部128个ACSII字符,0-127共128个编码。在JAVA中可以使用统一码。

1 unicode字符表:

1 Unicode编码表 

 Unicode只有一个字符集,中、日、韩的三种文字占用了Unicode中0x3000到0x9FFF的部分  
  Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符, 比如汉字"经"的编码是0x7ECF,注意字符编码一般用十六进制来 表示,为了与十进制区分,十六进制以0x开头,0x7ECF转换成十进制 就是32463,UCS-2用两个字节来编码字符,两个字节就是16位二进制, 2的16次方等于65536,所以UCS-2最多能编码65536个字符。 编码从0到127的字符与ASCII编码的字符一样,比如字母"a"的Unicode 编码是0x0061,十进制是97,而"a"的ASCII编码是0x61,十进制也是97, 对于汉字的编码,事实上Unicode对汉字支持不怎么好,这也是没办法的, 简体和繁体总共有六七万个汉字,而UCS-2最多能表示65536个,才六万 多个,所以Unicode只能排除一些几乎不用的汉字,好在常用的简体汉字 也不过七千多个,为了能表示所有汉字,Unicode也有UCS-4规范,就是用 4个字节来编码字符,不过现在普遍采用的还是UCS-2,只用两个字节来 编码,看一下Unicode对汉字的编码: 


 
2 汉字编码表 


  U+  0   1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  
-----------------------------------------------------
4e00 一 丁 丂 七 丄 丅 丆 万 丈 三 上 下 丌 不 与 丏
4e10 丐 丑 丒 专 且 丕 世 丗 丘 丙 业 丛 东 丝 丞 丟
4e20 丠 両 丢 丣 两 严 並 丧 丨 丩 个 丫 丬 中 丮 丯
4e30 丰 丱 串 丳 临 丵 丶 丷 丸 丹 为 主 丼 丽 举 丿
4e40 乀 乁 乂 乃 乄 久 乆 乇 么 义 乊 之 乌 乍 乎 乏
4e50 乐 乑 乒 乓 乔 乕 乖 乗 乘 乙 乚 乛 乜 九 乞 也

ANSI和UTF-8的区别

ANSI 和 UTF-8 是两种不同的编码方式,它们的主要区别在于字符的编码方式和所支持的语言范围。

ANSI(American National Standards Institute)是一种美国的行业标准,用于在不同国家和地区的操作系统中表示字符。ANSI 使用单一字节(8位)来编码字符,这导致了一些问题,因为它只能表示有限的字符集,并且不同版本的 ANSI 编码之间不兼容。例如,在简体中文 Windows 操作系统中,ANSI 编码可能对应于 GBK 编码;而在日文中,它可能与 Shift_JIS 编码相关联。因此,当需要在不同系统和平台上共享文本时,ANSI 编码可能会遇到困难,因为不是所有平台都能正确解析所有 ANSI 编码的文本内容。1

UTF-8(Unicode Transformation Format)是一种广泛使用的多字节编码方案,它可以表示世界上几乎所有语言和符号。UTF-8 通过使用 1 到 4 个字节来编码每一个字符,从而能够表达更丰富的字符集。与 ANSI 编码相比,UTF-8 具有更好的通用性和扩展性,能够在多种系统和平台上正确地表示文本。12

总结一下,ANSI 主要是一个美国标准的单字节编码,而 UTF-8 是一个通用的多字节编码,适合跨文化和跨平台的文本传输。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值