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个字节。这样理论上一共最多可以表示 65,536(2的16次方) 个字符。基本满足各种语言的使用。实际上目前版本的 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字节。理论上最多能表示 2,147,483,648(2的31次方)个字符,完全可以涵盖一切语言所用的符号。
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 编码,由于每个址都不相同,Macintosh机和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”即分别对应这三种实现方式。

Unicode字符简介相关推荐

  1. js中 字符串与Unicode 字符值序列的相互转换

    一. 字符串转Unicode 字符值序列 var str = "abcdef"; var codeArr = []; for(var i=0;i<str.length;i++ ...

  2. Linux qfile中文文件名,QFile无法打开包含unicode字符的文件名

    我和PySide有点问题.我使用QtCore.QImage处理一些图像,注意到路径名中包含unicode字符的图像文件没有被打开. 所以我开始调查,发现QFile也出现了同样的问题.在 我试着给它输入 ...

  3. psfaddtable - 添加一个Unicode字符表到控制台字体中

    总览 psfaddtable 字体文件 表文件 [输出文件] 描述 Psfaddtable 命令融合了 字体文件 提供的 .psf 格式的控制台字体和 表文件 提供的Unicode字符表, 生成一个带 ...

  4. 大容量导入或导出的数据格式 -- Unicode字符格式

    应用场景 使用包含扩展/DBCS 字符的数据文件在多个 SQL Server 实例之间大容量传输数据时,建议使用 Unicode 字符格式. 从服务器导出数据时,Unicode 字符数据格式允许使用与 ...

  5. unicode字符编码表下载_详解字符编码(上)

    作者 | 张奎 字符编码相关问题是软件开发过程中的常见问题,本文对字符编码的概念进行了介绍,并针对字符编码的常见问题给出了解释. 字符编码概念 下面以一个例子来引入对字符编码的介绍,汉字"柯 ...

  6. 在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符

    报错 在使用MySQL-Front导入sql文件时报错1113: 在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符. (#1113) 解决方案 导入.sql文件时,单击 选择文件对 ...

  7. php对象怎么拆分字符串数组,在PHP中将字符串拆分为Unicode字符数组的最佳方法是什么?...

    在PHP中,将字符串拆分为Unicode字符数组的最佳方法是什么?如果输入不一定是UTF-8? 我想知道输入字符串中的Unicode字符集是否是另一组Unicode字符的子集. 为什么不直接运行mb_ ...

  8. JAVA如何正确处理Unicode字符

    最近在开发输入法程序时遇到一个小问题,就是删除一个emoji时,不能一次删干净,需要执行两次操作才可以.Intuitively,这肯定是java操作unicode字符的问题,于是找了JAVA官方文档参 ...

  9. SQL 中的unicode字符

    要将字符转换成unicode字符以显示某些符号,可以在字符串前加N,如: select N'♧♡♂♀♠♣♥❤☜☞☎☏ ' 转载于:https://www.cnblogs.com/Laro/archiv ...

最新文章

  1. SIEM部署的几条最佳实践
  2. Shell脚本读取命令行参数
  3. python调试网页_Python Django shell 调试
  4. Python与Golang协程异同
  5. 使用 Django + Wusgi + Nginx 部署 Django
  6. 7本书告诉你,为什么拯救“流浪地球”的是人类,不是AI?
  7. 超过 C++、压制 Java 与 C,Python 拔得 TIOBE 年度编程语言!
  8. 基于 Flink+Iceberg 构建企业级实时数据湖
  9. mysql 介于两个日期函数_帮忙看一上这个mysql函数,用来返回两个日期之间的年数...
  10. 如何使用百度云人脸识别服务(V3版接口python语言) (七)开始应用人脸库
  11. 计算机研究生复试常见面试题——计算机网络部分
  12. Arduino教程: 斯通恩 STWI101WT-01 人机交互显示屏和Arduino
  13. python中如何判断词性_Python自然语言处理 5 分类和标注词汇
  14. 【H3C模拟器】华三交换机配置IRF堆叠
  15. 阿里巴巴的东南亚战事:另一次拼多多式的奇袭
  16. 子平真诠释疑笔记(三)
  17. 基因数据处理8之BWA_MEM小数据集处理(成功)
  18. 【终结扩散模型】Consistency Models.OpenAI开源新模型代码,一步成图,1秒18张
  19. sphinx在windows下的简单安装与使用
  20. 树莓派3b+安装ubuntu 16.04+ROS kinetic过程详解及踩坑总结

热门文章

  1. 教育孩子的11条法则
  2. 警惕身边的视力杀手!教你调出液晶显示器健康亮度[转]
  3. 安装软件出现错误代码0x8007007e
  4. [CRM] CentOS7.4 安装SugarCRM
  5. 软件测试 | 测试开发 | 做为测试,那些必须掌握的测试技术体系
  6. 浅析地质勘探基本原理
  7. 通过区块链技术实现计算资源的高效利用
  8. 灰度化之后的图片呈绿色
  9. pingpong机制的理解
  10. Java 17 版本的新特性