字符集和字符编码的学习
文章目录
- 标准 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 0000
至 0x0000 007F
:0xxxxxxx
0x0000 0080
至 0x0000 07FF
:110xxxxx 10xxxxxx
0x0000 0800
至 0x0000 FFFF
:1110xxxx 10xxxxxx 10xxxxxx
0x0001 0000
至 0x0010 FFFF
:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
汉字“王”在 UCS-4 的码位(即 Unicode 编码)是 0x0000738B
,转换成二进制码就是 00000000 00000000 01110011 10001011
。
0x0000738B
属于 UTF-8 所划分的第三区间,即三字节模板 1110xxxx 10xxxxxx 10xxxxxx
,00000000 00000000 01110011 10001011
从后面往前面逐个替代模板中的 x
,得到 11100111 10001110 10001011
,再把这个二进制编码转换成十六进制编码得到 0xe78e8b
,而这个就是汉字“王”的 UTF-8 编码了。
字符集和字符编码的学习相关推荐
- 字符、字符集和字符编码详解(一文扫清疑惑)
前言 字符.字符集和字符编码时常看见,之前也看过一些博文,看得迷迷糊糊地,看过即忘,今天有幸碰到一篇能让我醍醐灌顶的文章,整理一下相关知识点与大家分享! 原博文地址:字符集编码详解(学习,看一篇就够了 ...
- 关于字符集和字符编码自己汇总记录
第零篇 第一篇 第二篇 第三篇 第四篇:关于"unicode字符是2个字节"这句话的讨论 关于Unicode的中文百科 https://zh.wikipedia.org/wiki ...
- 字符集和字符编码的概念区分
字符集和字符编码的关系,字符集是规范,字符编码是规范的具体实现:字符集规定了符号和二进制代码值的唯一对应关系,但是没有指定具体的存储方式: unicode.ASCII.GB2312.GBK都是字符集: ...
- 13、字符集和字符编码
字符集:字符集是多个字符的集合,常见字符集有:ASCII字符集.GB2312字符集.GB18030字符集.Unicode字符集等. ASCII字符集:是英文大小写字符.阿拉伯数字和西文符号的一个集合. ...
- 字符集和字符编码(Charset Encoding)
字符集和字符编码 一文参透字符编码的难题! 引子 在 python 中,处理字符串是常见任务,因为字符串编码问题,经常出现字符串乱码. 在 matplotlib 绘图时,text对象,如 axes_t ...
- 谈谈字符集和字符编码
http://tommwq.tech/blog/2020/11/20/232 1 字符集和字符编码 字符集(charset)和字符编码(character encoding)是两个含义相近的概念.在历 ...
- 字符集和字符编码为什么乱码是问号?
什么是字符集和字符编码? 字符:在计算机和电信技术中,一个字符是一个单位的字形.类字形单位或符号的基本信息.即一个字符可以是一个中文汉字.一个英文字母.一个阿拉伯数字.一个标点符号等. 字符集:多个字 ...
- 字符集和字符编码(附c语言判断utf8编码)
1.基础知识 1.1.字符集 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 字符集(Character set)是多个字符的集合,字符集种类较多,每 ...
- 字符集和字符编码的类别与区分详解
目录 1. 字符集和字符编码 编码和解码 字节和字符 字符集和字符编码 2. ASCII 3. GB2312.GBK.GB18030和Big5 GB2312 GBK GB18030 Big5 4. U ...
- C--中文汉字占用字节长度(字符集和字符编码)
中文汉字占用字节长度 一.字符集和字符编码 1.概念 2.英文字母和中文汉字在不同字符集编码下的字节数 二.环境对应的字符编码 1.Ubuntu16.04虚拟机 2.Notepad++ 三.sizeo ...
最新文章
- Python模拟登录,Python识别图形验证码实现自动登陆
- 为 VUE 项目添加 PWA 解决发布后刷新报错问题
- 女黑客发现Firefox高危漏洞获奖4000美元
- java 反射泛型方法_java基础之反射和泛型以及注解
- 案例:用户登录(html--servlet--mysql)
- 应用开发专家一席谈:开发低代码,上手低门槛,AppCube使能Citizen Developer,人人都是开发者
- 高性能服务器架构思路
- java刚进公司做什么?
- c语言位运算符怎么用,傻傻分不清
- (原创)计算机视觉之数学原理-基础篇
- 为ASP.NET AJAX 1.0 Beta补充trace和dump功能
- cocostudio的TextField空件实现光标。
- 游戏修改器(一)瞬移
- Android开发资料超级给力小游戏(精典美女搓搓 妄撮版)源码
- sql 语句 where in的使用 where like %我
- 分辨率单位及换算,LW / PH、LP / mm、L / mm、Cycles / mm、Cycles / pixel、LP / PH
- 技术面试最后反问面试官的问题合集
- 计算机职高会考知识,高职考试语文基础知识
- From Intrusion Detection to Attacker Attribution: A Comprehensive Survey of Unsupervised Methods翻译
- 部落冲突,欢迎回归玩家,23级大师联赛部落欢迎你长住
热门文章
- java gradle构建_在Gradle中为JPMS构建Java 6-8库
- aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存
- 精简jdk包_在JDK 12精简数字格式中使用最小分数数字
- 文档在线签名_为什么需要为文档和合同切换到在线签名
- conditional_如何:在Spring中使用@Conditional和Condition注册组件
- redis开启redis_Redis聚类
- java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程
- java 面试指南_Java面试参考指南–第1部分
- Java 10:将流收集到不可修改的集合中
- Spring Boot&JPA&Hibernate&Oracle