编码方式 / ASCII、UNICODE、UTF-8、ANSI
一、ASCII
- 全称:American Standard Code for Information Interchange。
- 占用 1 个字节。
- 共可以表示 128 个字符,因为最前面那一位始终为 0 。
- 程序员必背:
字符 ASCII码 ‘0’ 48 ‘A’ 65 ‘a’ 97
二、UNICODE (Universal Code)
Unicode 只是一个符号集,它只规定了字符与二进制代码的对应关系,却没有规定这个二进制代码存储方式。也就是说有的字符可能占一个字节,有的可能占用 2 个、3 个或者更多。因为计算机无法知道内存中三个字节代表是一个字符还是两个还是三个,所以最好能够统一字节数目,但是如果统一为 3 个字节的话,ASCII码字符对应的二进制前面两个字节都得填充 0,这对存储空间是一个极大的浪费。为了解决上述问题,出现了很多 unicode 的很多实现方法,例如:utf-8、utf-16、utf-32。
三、UTF-8
1、全称:UCS Transformation Format 8bit。
2、Unicode 编码范围是:0-0x10FFFF。
这是一种占用的字节可以变长的编码方式,这个方案的意思以 8 位为单位来标识文字。编码规则如下。
Unicode 编码(16进制) | UTF-8 字节流(二进制) |
000000 - 00007F | 0XXXXXXX |
000080 - 0007FF | 110XXXXX 10XXXXXX |
000800 - 00FFFF | 1110XXXX 10XXXXXX 10XXXXXX |
010000 - 10FFFF | 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX |
(1)对于单字节的字符,第一位为 0,其他位为 unicode 编码(与ASCII相同)。
(2)对于多字节(n)的字符,从左往右数,第一个字节的前 n 位为,第(n+1)位为 0,后面的字节的前两位分别是1和0,其他各位依次填入 UNICODE 编码,剩余位置填 0 。
栗子:
字符“人”的 unicode 编码为 0x4eba,其二进制为100111010111010,由此可知其一共占用了16位,故UTF-8的实现方法是:11100100 10111010 10111010。
上述中,双星号括起来的部分为unicode编码,其他部分为UTF-8的规则位。
四、UTF-16、UTF-32
任何字符都是使用 2 个字节或者 4 个字节存储。
上述字符“人”的 UTF-16 的是实现方式为 100111010111010 。
上述字符“人”的 UTF-32 的是实现方式为 0000000000000000100111010111010 。
五、UTF-8 和 UTF-16 的优缺点
- 当字符的 unicode 编码是单个字节时,用 UTF-8 合适,因为向下兼容ASCII码,占用空间小。
- 当字符的 unicode 编码是多个字节时,用 UTF-16 或者 UTF-32 合适,因为节省空间(少去了 UTF-8 的规则位)。
- UTF-8 容错率较低,因为在解码时需要参照字节开始位,若文件传输过程中开始位传输错误,就可能导致后面所有的位就乱码。而 UTF-16 和 UTF-32 则不会,因为不需要参照字节开始位,某一位传输错误,不影响后续字符的解码。
- UTF-8 编码容量更大,更加灵活,可以满足现存的所有的字符的要求。UTF-16 则只能编码 65536 个字符,使用其时不得不考虑有的字符无法编码的问题。
- UTF-16 要考虑大小端字节序的问题,UTF-8 则不用。
六、ANSI 编码
不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文 Windows 操作系统中,ANSI 编码代表 GBK 编码;在繁体中文 Windows 操作系统中,ANSI编码代表 Big5;在日文 Windows 操作系统中,ANSI 编码代表 Shift_JIS 编码。ANSI 编码表示英文字符时用一个字节,表示中文用两个或四个字节。
(SAW:Game Over!)
编码方式 / ASCII、UNICODE、UTF-8、ANSI相关推荐
- 字符的编码方式 ASCII 、GBK 、UTF-8 、Unicode 、Unicode big endian
字符的编码方式很多种 ,我们常用到的是ASCII .GBK .UTF-8 .Unicode .Unicode big endian等. 想查看的话,可以用记事本新建一个txt文档,里面输入字符或汉字, ...
- HTTP 头部的编码方式——ASCII编码
先说结果,http请求行.响应行的编码方式都为ASCII,这也是为什么需要对url进行url编码,将非ASCII字符转为ASCII字符. 我们知道在HTTP头部中传入的信息不会被url encode, ...
- JAVA中默认的编码方式是Unicode是什么意思?
编码问题存在两个方面:JVM之内和JVM之外. 1.Java文件编译后形成class 这里Java文件的编码可能有多种多样,但Java编译器会自动将这些编码按照Java文件的编码格式正确读取后产生cl ...
- 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 普通的linux 和 普通的windows. ...
- Unicode、UTF-8、ASCII等编码方式浅述
关于编码问题,虽然在开发中经常用到,但是对于各种编码方式的实现.相互之间的转换.在实际场景中的使用区别等方面并没有深刻的理解.今天针对Unicode.UTF-8.ASCII.ANSI.GB2312/G ...
- 【转】刨根究底字符编码之十——Unicode字符集的字符编码方式
一.字符编码方式CEF的选择 1. 由于Unicode字符集非常大(并且作为开放字符集还在不断扩展之中),有些字符的编号(即码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用两 ...
- 四、字符编码:ascii、gbk、Unicode、utf-8
编码和解码: 编码(encode)和解码(decode):计算机中储存的信息都是用二进制数表示的:而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按照何种规则将字符存储在计算机 ...
- 字符编码,ASCII、Unicode与UTF-8的理解
首先我们先要明白的两点是:1.计算机中的信息都是由二进制的0和1储存的:2.我们再计算机屏幕上看到的各种字符都是计算机系统按照一定的规则将二进制数字转换而来的. 一.基本概念. 1.字符集(chars ...
- 刨根问底:C++中宽字符类型(wchar_t)的编码一定是Unicode?长度一定是16位?
转发的:https://www.ituring.com.cn/article/111027的文章 刨根问底:C++中宽字符类型(wchar_t)的编码一定是Unicode?长度一定是16位? cons ...
最新文章
- 小米正用时序数据库,解决这个“硬核”问题
- [TPYBoard - Micropython之会python就能做硬件 7] 学习使用蓝牙模块及舵机
- IOS基础之使用UICollectionView纯代码创建
- 前端学习(1975)vue之电商管理系统电商系统之渲染参数下的可选项
- SharePoint咨询师之路:设计之前的那些事四:负载均衡 - web服务器
- C#LeetCode刷题之#326-3的幂(Power of Three)
- Bootstrap-Table事件和方法
- HDU 6183 2017广西邀请赛:Color it(线段树)
- Pr 入门教程,如何在节目监视器中修剪剪辑?
- ORACLE 完美卸载
- 怎么把mov格式的视频转换成mp4?
- 什么是互联网思维(举个例子,妹子需要钱堕胎)
- div+css实现圆形loading动画,渐变拖尾动画
- HTML5实现点击触发灯泡开关
- JS中函数式编程基本原理简介
- 用canvas画一个太极八卦图
- 不同的丘脑皮层网络动力学与慢性腰痛的病理生理学有关
- 逆向学习路线(推荐书籍)
- 007 人工智能摄像头之二哈识图转接板模块
- 超实用的15个shell脚本,有手就会,拿走不谢