教妹学Java(十):Unicode字符集简介

2023-10-27

大家好,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。本篇文章通过我和三妹对话的形式来谈一谈“Unicode字符集简介”。

教妹学 Java,没见过这么有趣的标题吧?“语不惊人死不休”,没错,本篇文章的标题就是这么酷炫,接受不了的同学就别点进来看了,所谓好奇心害死猫;能够接受的同学我只能说你赚到了,你不仅能在阅读的过程中感受到思维的乐趣,还真的能学习到知识。下面就由我来介绍一下故事的背景吧。

我有一个漂亮如花的妹妹(见上图),她叫什么呢?我想聪明的读者朋友们都能猜得出:沉默王三,没错,年方三六。父母正考虑让她向我学习,做一名正儿八经的 Java 程序员。我期初是想反抗的,因为程序员这行业容易掉头发。但家命难为啊,与其反抗,不如做点更积极的事情,写点有趣的文章,教妹妹如何更快地掌握 Java 这门编程语言。毕竟程序员还算得上高薪(都是拿命换的啊)。

(铺垫结束,正文开始)

“二哥,上一篇文章中提到了 Unicode 字符集,说 Java 中的
char 类型之所以占 2 个字节,是因为 Java 使用的是 Unicode 字符集而不是 ASCII 字符集,我有点迷,想了解一下,能细致给我说说吗?”

“当然可以啊。”

Unicode 是一种国际通用的标准字符编码,能够代表世界上大多数的书面语言。在 Unicode 字符集出现之前,已经存在不少字符集了,比如说:

  • ASCII,美国标准信息交换码,一共规定了 128 个字符的编码,比如空格 SPACE 是 32(二进制 00100000),大写的字母 A 是 65(二进制 01000001)。这 128 个符号(包括 32 个不能打印出来的控制符号),只占用了一个字节的后面 7 位,最前面的一位统一规定为 0。

  • ISO 8859-1,为西欧而生。英语用 128 个符号编码就够了,但是用来表示其他语言,128 个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的 é 的编码为 130(二进制 10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多 256 个符号。

  • GB2312,简体中文编码方式。使用两个字节表示一个汉字,所以理论上最多可以表示 256 x 256 = 65536 个符号,因为汉字就多达 10 万个左右,一个字节只能表示 256 种符号,肯定是不够的。

它们引出了两种问题:

  • 一种特定的码只能只能针对一种地区的语言标准。
  • 不同字符集的编码对应的字节数不同,有的一个,有的两个,有的更多,不够统一。

世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode 是一个很大的集合,现在的规模可以容纳 100 多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母 AinU+0041 表示英语的大写字母 AU+4E25 表示汉字。具体的符号对应表,可以查询 unicode.org,或者专门的汉字对应表

Unicode 的一个字符占用 2 个字节,所以 Java 的 char 类型也占用 2 个字节。


本篇文章为《教妹学Java》专栏的第十篇文章,是不是有趣得很?我相信你能感受的到,这可是全网独一份,我看到已经有人在模仿了。现在定价只需 9.9 元,9.9 元你连一杯奶茶都买不到,但却能买下二哥精心制作的专栏,据说 CSDN 已经考虑涨价了,毕竟已经卖出一百多份了。

我知道,购买专栏的同学都是冲着二哥的名声来的,毕竟二哥是 CSDN 的明星博主,哈哈。为表谢意,我再附送上个人微信(qing_gee),你有什么问题都可以来咨询。

上一篇回顾:教妹学Java(九):Java中的数据类型

PS:本篇文章中的示例代码已经同步到码云,传送门~

原创不易,喜欢就点个赞,因为你一个小小的举动,就会让这个世界多一份美好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教妹学Java(十):Unicode字符集简介 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • lcov分支覆盖率的分析和总结

    覆盖率显示规则 一行从左到右分别万代表 1 代码行号 空白代表分支显示不过来产生换行 2 分支覆盖情况 3 该行调用次数 4 该行源代码以及行覆盖情况 其中 分支覆盖情况详细介绍如下 中括号代表生成的一对子分支 代表该子分支被覆盖 代表该子
  • 【经典排序算法】希尔排序(动图演示 + C 语言代码实现)

    经典排序算法 希尔排序 动图演示 C 语言代码实现 经典排序算法 十大经典排序算法汇总篇 文章目录 经典排序算法 希尔排序 动图演示 C 语言代码实现 1 动图演示 2 排序思想 3 时间 空间复杂度 4 代码实现 C语言 1 动图演示 2
  • LightGBM 相关知识理解

    文章目录 lightGBM 简介 直方图算法 Histogram algorithm 基本思想 直方图做差 带深度限制的 Leaf wise 算法 单边梯度采样算法 GOSS 互斥特征捆绑算法 EFB 1 解决哪些特征应该绑在一起 2 解决
  • python数据驱动测试设计_python - 数据驱动测试 - ddt

    coding utf 8 project jiaxy author Jimmy file study ddt py ide PyCharm Community Edition time 2018 12 06 14 48 blog https
  • Python实例005:给输入的n个整数进行升序或降序排序

    Python实例005 给输入的n个整数进行升序或降序排序 先将输入的整数利用append 方法插入到列表中 然后利用函数参数进行排序 可直接运用list sort 接受一个参数reverse True or False 来表示降序或升序排
  • 华为OD机试 - 报数游戏(JS)

    题目描述 100个人围成一圈 每个人有一个编码 编号从1开始到100 他们从1开始依次报数 报到为M的人自动退出圈圈 然后下一个人接着从1开始报数 直到剩余的人数小于M 请问最后剩余的人在原先的编号为多少 输入描述 输入一个整数参数 M 输
  • 一个好的MIS系统应该考虑哪些内容

    如果真正用心来做一套好的MIS系统应该考虑哪些内容呢 大概想了一下 以后再慢慢补充 一 界面友好 界面是可以灵活定制的 实现难度 中级 做好基础类窗口 在窗口初始化的时候进行读取定制方案 一种方式可以把元素打包成DLL或者其他文件 第二种方
  • uniapp微信小程序实现对地图多点或单点标记(@莫成尘)

    先看代码 复制使用即可 您将看到以下效果 注意 icon图标需要自行下载并替换 此外调用我本地的地图密钥可能有上线次数 请使用调试不要超过50次 如果无法出现效果 请注意报错信息 可能是调用上线 请自行在高德地图申请密钥
  • windows10 彻底关闭自动更新【绝对管用】

    windows10 彻底关闭自动更新 绝对管用 以下三步必须全做 1 服务里禁用 Windows Update 2 将服务里的 Windows Update的恢复设置为无操作 3 删除自动更新的触发器 这个很重要 否则过一段时间自动更新还是
  • C/C++框架和库

    值得学习的C语言开源项目 Libevent libev是一个开源的事件驱动库 基于epoll kqueue等OS提供的基础设施 其以高效出名 它可以将IO事件 定时器 和信号统一起来 统一放在事件处理这一套框架下处理 基于Reactor模式
  • ESQLC数据类型 - varchar类型

    GBase8s ESQL C字符串数据类型 GBase8s ESQL C支持5种字符串数据类型 如果在数据库的列中使用字符串类型 例如CHAR或者VARCHAR 以下ESQL C字符串类型可以使用 C语言的char类型 GBase8s ES
  • CSS常用水平垂直居中的几种方法

    CSS水平垂直居中 一 利用margin auto 二 利用position absolute 三 弹性盒子 四 利用水平对齐和行高 五 grid 为方便理解 欢迎查看线上效果 在线试一试 一 利用margin auto 元素有宽度和高度时
  • Jquery 找指定div下的radio 加bind事件 select 选中一用 $("#Sex").find("option[data-id='0']").prop("selected"!!!!

    页面加载时处理的事情 document ready function 1 匿名策略数组 给select动态追加option选项 let EncryTypeList id 1 text 前n位后隐藏 id 2 text 后n位后隐藏 Encr
  • Return消息机制

    Return Listener 用于处理一些不可路由的消息 消息生产者通过制定一个Exchane和RoutingKey 把消息送达到某一个队列中去 消费者监听队列进行消费处理 但是在某些情况下 发送消息的时候 当前Exchange不存在或制
  • vs默认编码

    1 工具 选项 环境 文档 不能以代码页的编码格式保持数据时将文档保持为Unicode工具 选择 文本编辑器 自动检测不带签名的UTF 8编码打开cs文件后 点击 文件 高级保存选项 在弹出的对话框中 可以看到目前的编码方式为UTF 8 带
  • python实现 发送图片到打印机 进行打印

    前言 环境 操作系统 win10 python 3 8 16 依赖 pip install openpyxl qrcode pillow pypiwin32 reportlab 功能 python printer py 运行后 会检索本机已
  • 图的基本概念

    图 G Graph V Vertex E Edge 图G由顶点集V和边集E组成 记为G V E 其中V G 表示图G中顶点的有限非空集 E G 表示图G中顶点之间的关系 边 集合 若V V1 V2 Vn 则用 V 表示图G中顶点的个数 也称
  • Android开发之数据储存

    相关文章 Content Provider 内容提供者 Broadcast Receiver 广播接收者 什么是Service 服务 Android提供了五种数据存储方式 分别是 SharePreferences SQLite Conter
  • Android http java.net.SocketException: sendto failed: EPIPE 解决方案

    在项目中Http上传文件时遇到这样一个错误 W System err java net SocketException sendto failed EPIPE Broken pipe Caused by libcore io ErrnoEx
  • 教妹学Java(十):Unicode字符集简介

    大家好 我是沉默王二 一个和黄家驹一样身高 和刘德华一样颜值的程序员 本篇文章通过我和三妹对话的形式来谈一谈 Unicode字符集简介 教妹学 Java 没见过这么有趣的标题吧 语不惊人死不休 没错 本篇文章的标题就是这么酷炫 接受不了的同