字符集与编码系列:Unicode字符集

字符集与编码系列:Unicode字符集基本概念 1 字符集 要想在计算机中显示文字 必须把文字都收集起来放在一个表中 这个表叫字符集 Charset 2 码表 字符集中的每个文字 都分配一个数字码 这叫码表 Codechart 比如中文 霸 字 在码表中对应的码是 38712 十进制 或者 9738 十六进制 3 编码方式 有了码表 就需要确定哪些文字用几个字节表示 以及如果有多个字节代表一个字 字节的读取顺序 这些就是字符编码方式 Encoding 虽然为了严谨起见 上面我把字符集和码表分开说明 但实际上很多字符集也给

基本概念

 

1.字符集:要想在计算机中显示文字,必须把文字都收集起来放在一个表中,这个表叫字符集(Charset)。

2.码表:字符集中的每个文字,都分配一个数字号码,这叫码表(Code chart)。比如中文 ‘霸’字,在码表中对应的码是38712(十进制),或者9738(十六进制)。

3.编码方式:有了码表,就需要确定哪些文字用几个字节表示,以及如果有多个字节代表一个字,字节的读取顺序,这些就是字符编码方式(Encoding)。

虽然为了严谨起见,上面我把字符集和码表分开说明,但实际上很多字符集也给每个字符分配了一个码(Code Point),所以很多人经常也把字符集叫做码表、码表叫做字符集。

Unicode

目前国际通用的字符集叫Unicode(又叫万国码、统一码),全世界所有民族地区的文字基本都包含在里面。它的出现是为了解决世界各地用不同的一套字符集,然后计算机软件无法兼容共用的问题,造福了软件开发者,也方便了用户。下图就是Unicode字符集中汉字(CJK)码表的样子,每个汉字都有个号码,比如4E00就是一的号码。

字符集与编码系列:Unicode字符集

 

 

Java语言默认就使用Unicode字符集。

Unicode字符集把全世界主要文字都包括进来,刚开始每个字符用2个字节来表示,值范围0x0000~0xFFFF,共可以表示65536个字符。

后来2个字节发现不够用,比如生僻字、网络流行的电子表情符号emoji等,因此Unicode字符集不停地扩充,字符集越来越庞大,现在的Unicode字符集的编码空间扩充到3个字节,最大值为0x10FFFF,某些新字符需要3个字节才能表示。

 平面(Plane)和块(Block)

Unicode扩充之后,为了便于描述和统一分配,就有了一个新的概念:平面(Plane)。除了之前的FFFF两个低字节用来表示字符的码,第三个字节的值用来表示平面编号。比如Unicode码0x10FFFF中的0x10,就是平面编号,因此,现在的Unicode有0-16共17个平面,每个平面可以容纳FFFF个文字,所以:

理论上Unicode容纳的字符数量0x10FFFF = 平面数量 × 每平面容量 = 17 × 65536 = 个

平面又包含了块(Block)的概念,一个块就是一个字节的空间,最多能表示256个字符。一个平面是2个字节的空间,最大FFFF,低位的FF是一个块,高位的FF用来作为块的编号。所以:

理论上一个平面字符数量 = FF个块 × 每个块FF个字符 = 256 ×256 = 65536个字符

BMP平面

Unicode最重要、最常用的平面是第一个平面,简称BMP(Basic Multilingual Plane ),编号为0,其实也就是最早的那65535个文字,其中已经包含了世界各民族的常用文字。其中,汉字(CJK)是占空间最多的,下图浅红色从34一直到9F共107个块,每个块又能表示256个字符,所以

理论上BMP平面包含汉字数量 = 107 × 256 = 27392个

字符集与编码系列:Unicode字符集

 平面总体使用情况

目前0~16共17个平面的字符分配范围如下表。可以看到,平面4-13是空闲的,暂未分配任何字符。平面14~16是特殊平面和私有平面。

除了第0个平面BMP,平面1、2、3也已经扩展了不少字符。汉字除了在平面0霸榜,在平面2和3再次“包场”,这两个平面基本都是新补充进来的汉字生僻字。

字符集与编码系列:Unicode字符集

字符集与编码系列:Unicode字符集

 关于Unicode字符集的知识,先介绍到这里,下一篇讲Unicode和Java中的char类型。

 Unicode权威资料传送门:

        官网用户主页:Unicode官网 

        官网技术主页:Unicode Standard 

        目前最新版本是2021年9月发布的14.0版:Unicode 14.0.0

        最新版码表:Unicode 14.0 Character Code Charts

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205185.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:36
下一篇 2026年3月19日 下午6:36


相关推荐

  • 构建OpenClaw全渠道部署服务体系 联想又推出线下部署服务

    构建OpenClaw全渠道部署服务体系 联想又推出线下部署服务

    2026年3月17日
    1
  • pycharm短期激活码2022【最新永久激活】

    (pycharm短期激活码2022)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html2KLKA7BQFO-eyJsa…

    2022年4月1日
    398
  • PSTools工具使用方法

    PSTools工具使用方法本篇文章是基于 pstools2 7 版本 pstools 是 sysinternals 出的一个功能强大的 nt 2k 远程管理工具包 它的主页为 http www sysinternals com 下载地址 https docs microsoft com zh cn sysinternals downloads pstools 使用工具的前提条件 1 首先确认组策略是否配置正确运行

    2026年3月18日
    1
  • hadoop使用教程_hadoop入门

    hadoop使用教程_hadoop入门Hadoop【大数据Hadoop系列】Hadoop2.X单机环境搭建【大数据Hadoop系列】Hadoop2.X集群环境搭建MapReduce【大数据Hadoop系列】分布式计算框架——MapReduceYARN【大数据Hadoop系列】Hadoop-YARN知识体系总结(2021版)【大数据Hadoop系列】集群资源管理器——YARNHDFS【大数据Hadoop系列】Hadoop-HDFS知识体系总结(2021版)【大数据Hadoop系列】Hadoop分

    2025年6月3日
    2
  • git切换到指定远程分支

    git切换到指定远程分支我们在使用git进行开发的时候经常会遇到需要切换远程分支并且提交到远程指定分支的情况,现在记录下操作步骤。查看远程所有分支$gitbranch-agitbranch不带参数,列出本地已经存在的分支,并且在当前分支的前面用*标记,加上-a参数可以查看所有分支列表,包括本地和远程,远程分支一般会用红色字体标记出来*devmasterremote…

    2022年4月13日
    85
  • 实现redhat的完全自动化安装

    实现redhat的完全自动化安装

    2021年8月13日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号