计算机字符编码——ASCII码和常用编码
计算机字符编码——ASCII码和常用编码
ASCII码
基本介绍
上个世纪60年代, 美国制定了一套字符编码, 对英语字符与二进制位之间的关系, 做了统一规定,这被称为ASCII码。
ASCII码一共规定了128个字符的编码, 比如空格“SPACE”是32(二进制00100000), 大写的字母A是65(二进制01000001)。 这128个符号(包括32个不能打印出来的控制符号), 只占用了一个字节的后面7位, 最前面的1位统一规定为0。
特点
- 0~31 及 127(共 33 个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换
行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格) - 32~126(共 95 个)是字符(32 是空格),其中 48~57 为 0 到 9 十个阿拉伯数字。
- 65~90 为 26 个大写英文字母,97~122 号为 26 个小写英文字母,其余为一些标点符号、运算符号等。
- 后 128 个称为扩展 ASCII 码。许多基于 x86 的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第 8 位用于确定附加的 128 个特殊符号字符、外来语字母和图形符号。
缺点
- 不能表示所有字符。
- 相同的编码表示的字符不一样: 比如, 130在法语编码中代表了é, 在希伯来语编码中却代表了字母Gimel。
ASCII码表
编码格式
乱码
世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。
编码的发展历程
Unicode 编码
背景
在 Unicode 出现之前,所有的字符集都是和具体编码方案绑定在一起的(即字符集≈编码方式),都是直接将字符和最终字节流绑定死了。
例如 ASCII 编码系统规定使用 7 比特来编码 ASCII 字符集;GB2312 以及 GBK 字符集,限定了使用最多 2 个字节来编码所有字符,并且规定了字节序。这样的编码系统通常用简单的查表,也就是通过代码页就可以直接将字符映射为存储设备上的字节流了。如下图:
虽然通过使用不同字符集,我们可以在一台机器上查阅不同语言的文档,但是我们仍然无法解决一个问题:如果一份文档中含有不同国家的不同语言的字符,那么无法在一份文档中显示所有字符。为了解决这个问题,我们需要一个全人类达成共识的巨大的字符集,这就是 Unicode字符集。
Unicode
一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,使用 Unicode 没有乱码的问题。
Unicode 只是定义了一个庞大的、全球通用的字符集,并为每个字符规定了唯一确定的
编号,具体存储成什么样的字节流,取决于字符编码方案。推荐的 Unicode 编码是 UTF-16 和UTF-8。
Unicode对比早期编码
早期字符编码、字符集和代码页等概念都是表达同一个意思。例如 GB2312 字符集、GB2312编码,936 代码页,实际上说的是同个东西。
对于 Unicode 则不同,Unicode 字符集只是定义了字符的集合和唯一编号,Unicode 编码,
则是对 UTF-8、UCS-2/UTF-16 等具体编码方案的统称而已,并不是具体的编码方案。所以当需要用到字符编码的时候,你可以写 gb2312,codepage936,utf-8,utf-16,但请不要写 Unicode。
造成乱码的原因
造成乱码的原因就是因为使用了错误的字符编码去解码字节流,因此当我们在思考任何跟文本显示有关的问题时,请时刻保持清醒:当前使用的字符编码是什么。只有这样,我们才能正确分析和处理乱码问题。
Unicode缺点
- Unicode 只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储:无法区别 Unicode 和 ASCII:计算机无法区分三个字节表示一个符号还是分别表示三个符号
- 另外, 我们知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有
二到三个字节是0,这对于存储空间来说是极大的浪费。
UTF-8编码
UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。
顾名思义,UTF-8 就是每次 8 个位传输数据,而 UTF-16 就是每次 16 个位
UTF-8 是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度。
它可以使用 1~4 个字节表示一个符号。从 unicode 到 uft-8 并不是直接的对应,而是要过一些算法和规则来转换(即 Uncidoe 字符集
≠UTF-8 编码方式)。
UTF-8的编码规则:
- 对于单字节的UTF-8编码,该字节的最高位为0,其余7位用来对字符进行编码(等同于
ASCII码)。 - 对于多字节的UTF-8编码,如果编码包含 n 个字节,那么第一个字节的前 n 位为1,第一个字节的第 n+1 位为0,该字节的剩余各位用来对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10",其余6位用来对字符进行编码。
计算机字符编码——ASCII码和常用编码相关推荐
- 字符,字节和编码, ASCII码, DBCS码,SBCS码 与Unicode码
字符,字节和编码, ASCII码, DBCS码,SBCS码 与Unicode码 http://www.regexlab.com/zh/encoding.htm 1. 编码问题的由来,相关概念的理解 1 ...
- 计算机底层:ASCII码、区位码、国标码、汉字机内码,还有字形码和输入输出编码之间的关系以及介绍
计算机底层:ASCII.区位码.国标码.汉字机内码之间的关系,还有字形码和输入输出编码之间的关系以及介绍 键盘上有:数字.字母.符合.这些都称作为字符,而它们的组合就叫做:字符串. ASCII 键盘上 ...
- ascii码,unicode编码,utf-8编码
我理解的ascii码,unicode编码,utf-8编码: 1.ascii编码: 美国于上个世纪60年代制定了一套字符编码,英语字符与二进制位之间对应关系,做了统一规定.故此诞生了一直沿用至今的ASC ...
- c语言中字符如何转数字排序,常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字。对..,(c语言)输入三个字符后,按各字符的ASCII码从小到大的顺...
导航:网站首页 > 常用字符的ASCII码值从小到大的排列规律是:空格.阿拉伯数字.对..,(c语言)输入三个字符后,按各字符的ASCII码从小到大的顺 常用字符的ASCII码值从小到大的排列规 ...
- c语言求字符ascii,C语言中ASCII码是什么意思? c语言怎么求字符的ascii码
导航:网站首页 > C语言中ASCII码是什么意思? c语言怎么求字符的ascii码 C语言中ASCII码是什么意思? c语言怎么求字符的ascii码 相关问题: 匿名网友: 是一个字符表,一个 ...
- 【C++基础】ASCII码及常用函数
一.ASCII码 1.计算机的存储单位 1)最小单位:二进制位,单位比特/bit/b 2)基本单位:字节,单位Byte/B,1B=8b. 3)其他存储容量的单位:KB.MB.GB.TB(1TB=102 ...
- Java学习之字符与ASCII码相互转换的面板设计
此代码主要是设计一个小面板,在面板内可以实现字符与ASCII码的相互转换,代码如下: package cm.test.demo10;import java.awt.*; import java.awt ...
- C语言试题三十之请编写函数function对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。
1. 题目 请编写函数function,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C ...
- c语言 字符转换成ascii吗,C语言字符转换ASCII码
//函 数 名:CharToHex() //功能描述:把ASCII字符转换为16进制 //函数说明: //调用函数: //全局变量: //输 入:ASCII字符 //返 回:16进制 / ...
最新文章
- C语言中 sscanf 的用法
- ASP.NET弹出一个对话框
- C语言 将文件内容转换成Dump文件数据格式
- boost::geometry::strategy::simplify::douglas_peucker用法的测试程序
- LiveVideoStack线上分享第三季(三):大规模视频处理的挑战与应对
- sql 没有调试 菜单_MySQL递归查询上下级菜单
- 数学课本上的几大变态之处
- 【Java学习笔记十】输入输出流
- [JLOI2015]管道连接(斯坦纳树)
- python深拷贝,浅拷贝,赋值引用
- 全球超级计算机500强 中国独占两个第一
- 《Docker技术从入门到实践》第3,4,5章(三大概念)
- ES6 迭代器与生成器(非常详细、容易理解)
- x230键盘排线怎么拆_【HQP教程】记一次X230更换X220键盘
- teamviewer或向日葵远程ubuntu系统不能调节屏幕分辨率
- 计算机萌新适合学安卓,老学姐呕心沥血整理的大学必备的软件!萌新赶紧收藏...
- 常用开发软件下载网站集合
- 多目标优化——帕累托最优
- like功能以及check功能
- Omi官方插件系列 - omi-transform介绍