Unicode字符是什么?

本文介绍了Unicode编码标准,一种覆盖全球多种语言的字符编码方案。它详细解释了Unicode如何处理多语言文本,包括其与ASCII和ISO标准的兼容性,以及如何在不同环境中应用。

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

Unicode 是一种重要的交互和显示的通用字符编码标准,它覆盖了美国、欧洲、中东、非洲、印度、亚洲和太平洋的语言,以及古文和专业符号。Unicode 允许交换、处理和显示多语言文本以及公用的专业和数学符号。它希望能够解决多语言的计算,如不同国家的字符标准,但并不是所有的现代或古文都能够获得支持。
Unicode 字符可以适用于所有已知的编码。Unicode 是继 ASCII(美国国家交互信息标准编码)字符码后的一种新字符编码,它为每一个符号定义一个数字和名称,并指定字符和它的数值(码位),以及该值的二进制位表示法,通过一个十六进制数字和前缀(U)定义一个16位的数值,如:U+0041 表示 A,其唯一的名称是 LATIN CAPITAL LETTER A。但请注意:JavaScript 1.3 之前的版本并不支持 Unicode 编码。

Unicode 与 ASCII 和 ISO 的兼容性
Unicode 兼容于 ASCII 字符并被大多数程序所支持,前128个 Unicode 码同 ASCII 码具有同样的字节值;Unicode 字符从 U+0020 到 U+007E 等同与 ASCII 码的 0x20 到 0x7E,不同于支持拉丁字母的7位 ASCII,Unicode 对每个字符进行16位值的编码设置,它允许几万个字符,例如 Unicode 2.0 版包含 38,885 个字符,它也可以进行扩展,如 UTF-16 允许用16位字符组合为一百万或更多的字符,UTF 将编码转换为真实的二进制位。
Unicode 完全兼容于国际标准 ISO/IEC 10646-1; 1993,它是 ISO 10646 的一个子集,并支持用两个八进制数的 ISO UCS-2(Universal Character Set)。JavaScript 1.3 版本对 Unicode 的支持意味着您可以任意地在程序中使用本地的字符以及特殊的科学符号。Unicode 提供了一种标准的方法来编码多语言文本,并且因为它兼容于 ASCII ,您也可以随意使用 ASCII 字符。
您可以在不同的语言中使用 Unicode 来显示字符或专业符号,但这需要一个客户端能够支持 Unicode,例如 Netscape Navigator 4.x,并且客户端还得支持 Unicode 字体以及操作平台的支援。例如 Windows 95 它只支持部分的 Unicode,另外,为了输入非 ASCII 字符,您还得有支持所有 Unicode 字符的输入设备,一个标准的扩展键盘不能够做到这一点,但我们可以用 Unicode 转义序列来输入 Unicode 字符。如果您还需了解 Unicode 更多的信息,请参见 Unicode Consortium Web site 2.0版 

http://www.unicode.org/http://charts.unicode.org/中发现在线信息。表7-6列出了由Unicode编码的文字,由此可知Unicode的广泛性。每一种文字的字符通常编码在65,536个号码中的一个连续区域内。许多语言都能使用其中某一区域的字符书写(例如,使用古斯拉夫语书写俄语),尽管有一些语言,如克罗地亚语或土耳其语需要混合匹配前4个拉丁文区域中的字符。
表7-6 Unicode文字块
文 字 范 围 目 的
Basic Latin
基本拉丁语 0-127 ASCII码,美式英语
Latin-1 Supplement
拉丁语补充-1 126-255 ISO Latin-1前半部分结合Basic Latin能处理丹麦语、荷兰语、英语、法罗群岛语、佛兰德语、德语、夏威夷语、冰岛语、印度尼西亚语、爱尔兰语、挪威语、葡萄牙语、西班牙语、斯瓦西里语和瑞典语
Latin Extended-A
拉丁文扩展集-A 256-383 该字符块增添了ISO 8859字符集Latin-2、Latin-3、Latin-4中的字符,而且是Basic Latin和Latin-1没有的字符。同它们结合能够编码南非荷兰语、法国布里多尼语、巴斯克语、加泰罗尼亚语、捷克语、世界语、爱沙尼亚语、法语、Friesland语、格陵兰岛语、匈牙利语、拉脱维亚语、立陶宛语、马耳它语、波兰语、普罗旺斯语、罗马尼亚语、吉普塞语、斯洛伐克语、斯洛文尼亚语、土耳其语和威尔士语
Latin Extended-B
拉丁文扩展集-B 383-591 大部分字符用于扩展Latin文字以处理使用非传统文字写的语言,包括许多非洲语言、克罗地亚连字符,与塞尔维亚古斯拉夫字母、中国的拼音和Latin-10中的Sami characters相匹配
IPA扩展字符集 592-687 国际音标字母
间距调节字符 686-767 通常能够改变前面字母发音的小符号
可识别的连接字符 766-879 不独立存在,一般与前面的字母连用(放置在上边)的可识别的记号,如:~、‘and ??
希腊 880-1023 基于ISO 8859-7的现代希腊语,同时提供古埃及语字符
续表
文 字 范 围 目 的
古斯拉夫 1024-1279 基于ISO 8859-5上的语言,俄语和多数斯拉夫语(乌克兰语、Byelorussian等),前苏联的许多非斯拉夫语言(Azerbaijani,Ossetian,卡巴尔德语,Chechen,Tajik等).几种语言(库尔德语,阿布哈西亚语)需要Latin和古斯拉夫字母
美国 1326-1423 美语
希伯来 1424-1535 希伯来语(古典和现代)、依地语、Judezmo、早期美语。
阿拉伯 1536-1791 阿拉伯语,波斯语、Pashto、Sindhi、库尔德语和早期土耳其语
梵文字母 2304-2431 梵语,北印度语,尼泊尔语和印度次大陆语言,包括:
Awadhi,Bagheli,Bhatneri,Bhili,Bihari,BrajBhasha,
Chhattisgarhi,Garhwali,Gondi,Harauti,Ho,Jaipuri,
KachchhiKanauji,Konkani,Kului,Kumaoni,Kurku,Kurukh,
Marwari,Mundari,Newari,Palpa,and Santali
孟加拉语 2432-2559 一种北印度文字,使用于印度的西孟加拉州和孟加拉国的孟加拉语、阿萨姆语、
Daphla、Garo、Hallam、Khasi、Manipuri、
Mizo、Naga、Munda、Rian、Santali
Gurmukhi 2560-2687 Punjabi
Gujarati 2686-2815 Gujarati
Oriya 2816-2943 Oriya、Khondi、Santali
泰米尔语 2944-3071 泰米尔语和Badaga、使用于南印度、斯里兰卡、新加坡和马来西亚部分地区
Telugu 3072-3199 Telugu、Gondi、Lambadi
埃纳德语 3200-3327 埃纳德语、Tulu
Malalayam 3326-3455 Malalayam
泰国语 3584-3711 泰国语、Kuy、Lavna、巴利语
老挝语 3712-3839 老挝语
西藏语 3840-4031 喜玛拉雅语包括西藏语、Ladakhi和Lahuli
乔治亚语 4256-4351 乔治亚语,黑海边乔治亚前苏维埃共和国语
Hangul Jamo 4352-4607 朝鲜、韩国音节的字母组成部分
Latin的附加扩展集 7680-7935 标准的Latin字母如E和Y与可识别的记号组合在一起,除了用于越南语元音中,很少使用
希腊语扩展集 7936-8191 希腊字母与可识别记号的组合,用于正统的希腊语中
通用的标点符号 8192-8303 各种标点符号
上标和下标 8304-8351 普通的上标和下标
货币符号 8352-8399 货币符号,一般在别的地方找不到
用于符号的组合记号 8400-8447 给多个字符做记号
像字母的符号 8446-8527 像字母的符号,如™
数表 8526-8591 分数和罗马数字
箭头符号 8592-8703 箭头符号
数学符号 8704-8959 不常出现的数学运算符
技术杂项 8960-9039 APL编程语言需要的符号和其他各种技术符号
控制图形 9216-9279 ASCII控制字符图形,常用于调试
光学字符识别 9280-9311 在打印支票上的OCR-A(光学字符识别)和MICR(磁性墨水字符识别)符号
续表
文 字 范 围 目 的
附加字符 9312-9471 放在圆和括号中的字母和数字
画方框字符 9472-9599 用于在等间距终端上画方框的字符
块元素 9600-9631 用于DOS和其他用途的等间距终端图形
几何形状 9632-9727 正方形、菱形、三角形等
杂项符号 9726-9983 纸牌、象棋、占卜等
Dingbats 9984-10175 Zapf Dingbat字符
CJK符号和标点 12286-12351 用于中国/日本和韩国的标点符号
平假名 12352-12447 日文字母的草体.
片假名 12446-12543 非草体的日文字母,通常用于西方的外来词汇,像"keyboard"
汉语拼音字母 12544-12591 中国的发音字母表
Hangul Compatibility Jamo 12592-12687 与KSC 5601代码兼容的韩国字符
Kanbun 12686-12703 在日文中用于指示古典中文的阅读顺序的记号
括起来的CJK字母和月份 12800-13055 用圆和括号括起来的Hangul和片假名字符
CJK Compatibility 13056-13311 只用于编码KSC 5601和CNS 11643的字符
统一的CJK象形文字 19966-40959 用于中文、日文和韩文的Han象形文字
Hangul音节 44032-55203 一种韩国音节
Surrogates 55296-57343 目前还不能使用,将来可用于扩展Unicode,使它包括超过百万的字符
个人使用 57344-63743 软件开发者可以在此包含自己的术语,与正在执行的字符不同
CJK兼容性象形文字 63744-64255 为了保持与现有的标准的一致性如KSC 5601,而使用的一些汉字象形文字
字母的表现方式 64256-64335 使用于Latin、美语和希伯来语中的连字和变种
阿拉伯表象形式 64336-65023 各种阿拉伯字符的变种
组合半记号 65056-65071 把跨越多个字符的多个可识别记号连成一个可识别的记号
CJK兼容性形式 65072-65103 用于台湾汉字象形文字
小型变种 65104-65135 用于台湾的ASCII标点符号的小的版本
附加的阿拉伯表象形式 65136-65279 各种阿拉伯字符变种
半宽和全宽形式 65280-65519 能够在中文和日文的不同代码间转换的字符
特殊字符 65520-65535 字节顺序记号和零宽度的非中断性空格,常用于Unicode 文件的开始
UTF-8
Unicode使用双字节表示一个字符,因此使用Unicode的英文文本文件大小是使用ASCII码或Latin-1文件的两倍。UTF-8是一个压缩的Unicode版本,使用单个字节表示最常用的字符,即0到127的ASCII字符,较少见的字符使用三个字节表示,特制是韩国音节和汉字。如果主要使用英文,UTF-8能够将文件压缩为原来的一半。如果主要使用汉语、朝语或者日语,UTF-8会使文件的尺寸增加50%��因此应当谨慎使用UTF-8。UTF-8几乎不能处理非罗马文字和非CJK文字,如希腊语、阿拉伯语、古斯拉夫语和希伯来语。
XML处理器在没有被预先通知的情况下假定文本数据是UTF-8格式。这意味着XML处理器能够阅读ASCII码文件,但是使用它处理其他格式的文件像MacRoman 或者 Latin-1会有困难。我们很快就能学会如何在短时间内解决这个问题。
通用字符系统
Unicode因为没有包含足够多的语言和文字而受到批评,特别是亚洲东部的语言。它只定义了中国、日本、朝鲜和古越南使用的80,000象形文字中的20,000个左右。(现代越南语使用一种罗马字母。)
UCS (Universal Character System)��通用字符系统,也称作ISO 10646,使用四个字节(确切地说是31位)表示一个字符,以给20多亿不同的字符提供足够的空间。这样能容易地覆盖地球上任何一种文字和语言使用的每个字符。而且还可以给每一种语言指定一个完整的字符集,使法语中的“e”不同于英语和德语中的“e”等等。
与Unicode一样,UCS定义了许多不同的变种和压缩形式。纯粹的Unicode有时指USC-2,是双字节的UCS。UTF-16是一种特别的编码,它把一些UCS字符安排在长度变化的字符串中,在这种方式下Unicode(UCS-2)数据不会改变。
UCS超越Unicode的优点主要是理论方面的。在UCS中实际定义过的字符就是Unicode中已有的字符。但是UCS为以后的字符扩充提供了更多的空间。

为了使不同的字符集能够处理好不同的文字和语言,必须满足:
1. 不同时引用多种文字。
2. 不与使用不同字符集的人交换文件。
由于Mac和PC机都使用不同的字符集,越来越多的人无法遵循以上原则。很明显的是需要一种得到大家的认可并且编码了全世界各种文字的字符集。建立这样的字符集很难,需要对成百上千种语言和文字有细致的了解。要使软件开发商们同意使用这种字符集就更难了。不过这方面的努力一直在进行,终于创建了一个符合要求的字符集��Unicode。而且主要卖方(微软、苹果、IBM、Sun、Be等)正逐步趋向于使用它。XML把Unicode当作自己的默认字符集。
Unicode使用0~65,535的双字节无符号数对每一个字符进行编码。目前已经定义了40,000多个不同的Unicode字符,剩余25,000个空缺留给将来扩展之用。其中大约20,000个字符用于汉字,另外11,000左右的字符用于韩语音节。Unicode中0~`255的字符与Latin-1中的一致。
如果在本书中显示所有的Unicode字符,那么除了这些字符表格外,书中将容纳不下别的任何东西。如果需要知道Unicode中不同字符的确定编码,买一册Unicode标准(第二版,ISBN 0-201-48346-9,Addison-Wesley出版)。该书共950页,包括对Unicode 2.0的全部详细说明,还包括Unicode 2.0中定义的所有字符集的图表。还可以在Unicode协会的网址:
<think>好的,我现在需要向用户解释什么是Unicode字符串。首先,我应该回忆一下自己了解的Unicode知识,确保没有记错。Unicode是一个字符编码标准,用来统一表示不同语言字符。而字符串在编程中通常是字符的序列,所以Unicode字符串应该就是用Unicode编码的字符串吧。 接下来,我得考虑用户的背景。用户可能对计算机编码不太熟悉,所以需要从基础讲起。先解释为什么需要Unicode,比如ASCII只能表示英文字符,而其他语言如中文、日文等需要更多的字符,导致出现了各种编码方式,如GBK、Shift-JIS等,但这些编码不兼容,容易乱码。 然后,Unicode的出现解决了这个问题,统一给每个字符分配唯一的码点。这时候可以提到码点的表示方式,比如U+后面跟十六进制数,例如“汉”字的码点是U+6C49。Unicode字符串就是由这些码点组成的字符串,能够包含各种语言字符,包括符号和表情等。 还需要区分不同的编码方式,比如UTF-8、UTF-16、UTF-32,这些是Unicode的实现方式,而Unicode本身是标准。在编程中,比如Python3中的字符串默认就是Unicode,使用UTF-8编码,这样处理多语言文本更方便。 还要注意可能存在的误区,比如Unicode和编码格式的区别,避免混淆。另外,可能需要提到实际应用中的好处,比如数据交换、国际化支持等,让用户理解为什么Unicode字符串重要。 检查有没有遗漏的关键点,比如Unicode的版本发展,可能用户不需要太深入,但可以简要提到。另外,是否需要举例说明?比如用Python展示Unicode字符串的样子,或者比较非Unicode的情况下的问题。 最后,确保语言通俗易懂,结构清晰,分点或分段解释,不使用过于专业的术语,必要时用比喻帮助理解。比如,把Unicode比作一种全球通用的字符字典,每个字符有唯一编号,这样不同系统都能正确显示。</think>Unicode字符串本质上是用**统一编码标准表示文本数据**的解决方案。我们分三个层次理解: 1. **痛点起源**(传统编码的混乱) - 早期ASCII码(0-127)只能表示英文字母和基础符号 - 中文需要GBK(2字节)、日文需要Shift-JIS等地区性编码标准 - 不同编码混用导致乱码(如用GBK打开BIG5编码文件) 2. **核心原理**(Unicode的设计思路) - 为全球所有文字系统建立统一的「身份证号」(码点) - 示例:`U+4E2D`表示"中",`U+1F600`表示😀 - 当前版本(15.0)覆盖149,813个字符,包括: ✓ 现代语言(汉字、拉丁字母、阿拉伯文等) ✓ 历史文字(楔形文字、西夏文) ✓ 符号(数学符号、表情符号) 3. **技术实现**(编码方案) | 编码类型 | 单位长度 | 特点 | 应用场景 | |------------|----------|-------------------------------|------------------| | UTF-8 | 1-4字节 | 兼容ASCII,空间效率高 | Web传输(90%网站使用)| | UTF-16 | 2/4字节 | Java/.NET默认编码 | 本地应用程序 | | UTF-32 | 4字节 | 定长处理方便 | 文本处理内核 | **编程实践示例**(Python3): ```python # 直接表示多语言文本 s = "中文 Español 😊" print(len(s)) # 输出9(字符数而非字节数) # 编码转换过程 bytes_data = s.encode('utf-8') # 转为字节序列 decoded_str = bytes_data.decode('utf-16') # 错误!编码方式不匹配 ``` **关键优势**: - 数据持久化:用UTF-8保存文件可确保百年后仍可解读 - 国际化支持:单个系统同时处理阿拉伯语右向文字和中文竖排文本 - 安全处理:避免因编码转换导致的缓冲区溢出漏洞 当前所有主流操作系统和编程语言均已实现Unicode原生支持,标志着人类文字数字化进入真正意义上的「书同文」阶段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值