文章目录

  • 标准 ASCII
  • 扩展 ASCII
  • GB2312 编码
  • GBK 编码
  • GB18030 编码
  • Unicode 编码
    • UCS-2 字符集
    • UCS-4 字符集
  • UTF-8 编码

先有字符集,然后对每个字符进行编码,这叫字符编码,不同的编码规则就产生了不同的编码方案。

标准 ASCII

标准 ASCII 码也叫基础 ASCII 码,使用 7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字 0 到 9、标点符号,以及在美式英语中使用的特殊控制字符。

ASCII 编码是直接将 ASCII 字符集的码位转换成二进制数进行存储。

7 位二进制:0000 0000 ~ 0111 1111 这个范围的二进制数可以表示 128 个字符,最高位没有使用
可见字符:英文字母、数字、标点符号
不可见字符:即控制字符,例如,回车符、换行符等

需要记住的字符 ASCII 编码:
48~57 表示的是数字
65~90 表示的是大写英文字母
97~122 表示的是小写英文字母

扩展 ASCII

后 128 个称为扩展 ASCII 码,用来表示128 个特殊符号字符、外来语字母和图形符号,这叫 ASCII 扩展字符集。
1000 0000 ~ 1111 1111 这个范围的二进制数可以用来表示 128 个字符。
标准 ASCII 和扩展 ASCII 总共可以表示 256 个字符,这些字符都用 1 个字节来表示。

GB2312 编码

GB2312 字符集采有分区管理的模式,组成 94*94 的方阵,每一行称为一个“区”,每一列称为一个“位”,区号位号的范围均为 01-94,区号和位号组成的代码称为“区位码”,共计有 8836 个码位。

把每个字符对应的码位转换成二进制数,就是 GB2312 编码。

收集了 7445 个字符,其中汉字 6763 个。

01~09 区收录了除汉字以外的图形字符,共计 682 个字符
10~15 区为空白区,没有使用
16~15 区收录了 3755 个一级汉字(常用汉字),按拼音排序
56~87 区收录了 3008 个二级汉字(非常用汉字),按部首/笔画排序
88~94 区为空白区,没有使用

01~09 区表示非汉字的图形字符,共计 682 个字符:

左上角的编号叫“区号”,如上图的 03 区中的字符“y”的位号是 89,那么这个“y”的码位就是 0389

16~55 区收录了 3755 个一级汉字,按拼音排序:

如上图所示,汉字“饼”的区位码 1793

56~87 区收录了 3008 个二级汉字,按部首/笔画排序:


二级汉字都是一些不常用的汉字。
如上图所示,汉字“侃”的码位是 5709

如何存储“侃”这个汉字?

计算“侃”这个汉字字符的 GB2312 编码,如下图所示:

根据上图所示的计算结果,0xD9A9 就是“侃”这个汉字的 GB2312 编码,可为什么加上 A0 呢?不知道。

以上可以知道 GB2312 编码是 2 个字节表示一个字符。

GBK 编码

在 GB2312 字符集的基础上扩充,得到 GBK 字符集,对应的编码叫 GBK 编码。

GB18030 编码

在 GBK 字符集的基础上扩充,增加了很多少数民族的字符,得到 GB18030 字符集,对应的编码叫 GB18030 编码

Unicode 编码

Unicode 的学名是"Universal Multiple-Octet Coded Character Set",通用多八位编码字符集,简称为 UCS。

UCS-2 字符集

Unicode 早期使用 UCS-2 字符集,使用两个字节表示一个字符,可以表示 65536 个字符。

UCS-4 字符集

因为不足以表示全世界的字符,所以升级成了 UCS-4 字符集,使用 4 个字节来表示一个字符,使用 32 位的二进制数来表示字符,可以表示将近 43 亿个字符。

UTF-8 编码

UTF-8(Unicode Transformation Format)是针对 Unicode 的一种可变长度字符编码,它不是一种字符集。

UTF-8 将 UCS-4 字符集的码位划分成 4 个区间。

0x0000 00000x0000 007F0xxxxxxx
0x0000 00800x0000 07FF110xxxxx 10xxxxxx
0x0000 08000x0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0x0001 00000x0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

汉字“王”在 UCS-4 的码位(即 Unicode 编码)是 0x0000738B,转换成二进制码就是 00000000 00000000 01110011 10001011

0x0000738B 属于 UTF-8 所划分的第三区间,即三字节模板 1110xxxx 10xxxxxx 10xxxxxx00000000 00000000 01110011 10001011 从后面往前面逐个替代模板中的 x,得到 11100111 10001110 10001011,再把这个二进制编码转换成十六进制编码得到 0xe78e8b,而这个就是汉字“王”的 UTF-8 编码了。

字符集和字符编码的学习相关推荐

  1. 字符、字符集和字符编码详解(一文扫清疑惑)

    前言 字符.字符集和字符编码时常看见,之前也看过一些博文,看得迷迷糊糊地,看过即忘,今天有幸碰到一篇能让我醍醐灌顶的文章,整理一下相关知识点与大家分享! 原博文地址:字符集编码详解(学习,看一篇就够了 ...

  2. 关于字符集和字符编码自己汇总记录

    第零篇 第一篇 第二篇 第三篇 第四篇:关于"unicode字符是2个字节"这句话的讨论 关于Unicode的中文百科  https://zh.wikipedia.org/wiki ...

  3. 字符集和字符编码的概念区分

    字符集和字符编码的关系,字符集是规范,字符编码是规范的具体实现:字符集规定了符号和二进制代码值的唯一对应关系,但是没有指定具体的存储方式: unicode.ASCII.GB2312.GBK都是字符集: ...

  4. 13、字符集和字符编码

    字符集:字符集是多个字符的集合,常见字符集有:ASCII字符集.GB2312字符集.GB18030字符集.Unicode字符集等. ASCII字符集:是英文大小写字符.阿拉伯数字和西文符号的一个集合. ...

  5. 字符集和字符编码(Charset Encoding)

    字符集和字符编码 一文参透字符编码的难题! 引子 在 python 中,处理字符串是常见任务,因为字符串编码问题,经常出现字符串乱码. 在 matplotlib 绘图时,text对象,如 axes_t ...

  6. 谈谈字符集和字符编码

    http://tommwq.tech/blog/2020/11/20/232 1 字符集和字符编码 字符集(charset)和字符编码(character encoding)是两个含义相近的概念.在历 ...

  7. 字符集和字符编码为什么乱码是问号?

    什么是字符集和字符编码? 字符:在计算机和电信技术中,一个字符是一个单位的字形.类字形单位或符号的基本信息.即一个字符可以是一个中文汉字.一个英文字母.一个阿拉伯数字.一个标点符号等. 字符集:多个字 ...

  8. 字符集和字符编码(附c语言判断utf8编码)

    1.基础知识 1.1.字符集 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.  字符集(Character set)是多个字符的集合,字符集种类较多,每 ...

  9. 字符集和字符编码的类别与区分详解

    目录 1. 字符集和字符编码 编码和解码 字节和字符 字符集和字符编码 2. ASCII 3. GB2312.GBK.GB18030和Big5 GB2312 GBK GB18030 Big5 4. U ...

  10. C--中文汉字占用字节长度(字符集和字符编码)

    中文汉字占用字节长度 一.字符集和字符编码 1.概念 2.英文字母和中文汉字在不同字符集编码下的字节数 二.环境对应的字符编码 1.Ubuntu16.04虚拟机 2.Notepad++ 三.sizeo ...

最新文章

  1. Python模拟登录,Python识别图形验证码实现自动登陆
  2. 为 VUE 项目添加 PWA 解决发布后刷新报错问题
  3. 女黑客发现Firefox高危漏洞获奖4000美元
  4. java 反射泛型方法_java基础之反射和泛型以及注解
  5. 案例:用户登录(html--servlet--mysql)
  6. 应用开发专家一席谈:开发低代码,上手低门槛,AppCube使能Citizen Developer,人人都是开发者
  7. 高性能服务器架构思路
  8. java刚进公司做什么?
  9. c语言位运算符怎么用,傻傻分不清
  10. (原创)计算机视觉之数学原理-基础篇
  11. 为ASP.NET AJAX 1.0 Beta补充trace和dump功能
  12. cocostudio的TextField空件实现光标。
  13. 游戏修改器(一)瞬移
  14. Android开发资料超级给力小游戏(精典美女搓搓 妄撮版)源码
  15. sql 语句 where in的使用 where like %我
  16. 分辨率单位及换算,LW / PH、LP / mm、L / mm、Cycles / mm、Cycles / pixel、LP / PH
  17. 技术面试最后反问面试官的问题合集
  18. 计算机职高会考知识,高职考试语文基础知识
  19. From Intrusion Detection to Attacker Attribution: A Comprehensive Survey of Unsupervised Methods翻译
  20. 部落冲突,欢迎回归玩家,23级大师联赛部落欢迎你长住

热门文章

  1. java gradle构建_在Gradle中为JPMS构建Java 6-8库
  2. aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存
  3. 精简jdk包_在JDK 12精简数字格式中使用最小分数数字
  4. 文档在线签名_为什么需要为文档和合同切换到在线签名
  5. conditional_如何:在Spring中使用@Conditional和Condition注册组件
  6. redis开启redis_Redis聚类
  7. java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程
  8. java 面试指南_Java面试参考指南–第1部分
  9. Java 10:将流收集到不可修改的集合中
  10. Spring Boot&JPA&Hibernate&Oracle