计算机字符编码——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缺点

  1. Unicode 只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储:无法区别 Unicode 和 ASCII:计算机无法区分三个字节表示一个符号还是分别表示三个符号
  2. 另外, 我们知道,英文字母只用一个字节表示就够了,如果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码和常用编码相关推荐

  1. 字符,字节和编码, ASCII码, DBCS码,SBCS码 与Unicode码

    字符,字节和编码, ASCII码, DBCS码,SBCS码 与Unicode码 http://www.regexlab.com/zh/encoding.htm 1. 编码问题的由来,相关概念的理解 1 ...

  2. 计算机底层:ASCII码、区位码、国标码、汉字机内码,还有字形码和输入输出编码之间的关系以及介绍

    计算机底层:ASCII.区位码.国标码.汉字机内码之间的关系,还有字形码和输入输出编码之间的关系以及介绍 键盘上有:数字.字母.符合.这些都称作为字符,而它们的组合就叫做:字符串. ASCII 键盘上 ...

  3. ascii码,unicode编码,utf-8编码

    我理解的ascii码,unicode编码,utf-8编码: 1.ascii编码: 美国于上个世纪60年代制定了一套字符编码,英语字符与二进制位之间对应关系,做了统一规定.故此诞生了一直沿用至今的ASC ...

  4. c语言中字符如何转数字排序,常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字。对..,(c语言)输入三个字符后,按各字符的ASCII码从小到大的顺...

    导航:网站首页 > 常用字符的ASCII码值从小到大的排列规律是:空格.阿拉伯数字.对..,(c语言)输入三个字符后,按各字符的ASCII码从小到大的顺 常用字符的ASCII码值从小到大的排列规 ...

  5. c语言求字符ascii,C语言中ASCII码是什么意思? c语言怎么求字符的ascii码

    导航:网站首页 > C语言中ASCII码是什么意思? c语言怎么求字符的ascii码 C语言中ASCII码是什么意思? c语言怎么求字符的ascii码 相关问题: 匿名网友: 是一个字符表,一个 ...

  6. 【C++基础】ASCII码及常用函数

    一.ASCII码 1.计算机的存储单位 1)最小单位:二进制位,单位比特/bit/b 2)基本单位:字节,单位Byte/B,1B=8b. 3)其他存储容量的单位:KB.MB.GB.TB(1TB=102 ...

  7. Java学习之字符与ASCII码相互转换的面板设计

    此代码主要是设计一个小面板,在面板内可以实现字符与ASCII码的相互转换,代码如下: package cm.test.demo10;import java.awt.*; import java.awt ...

  8. C语言试题三十之请编写函数function对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。

    1. 题目 请编写函数function,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C ...

  9. c语言 字符转换成ascii吗,C语言字符转换ASCII码

    //函 数 名:CharToHex() //功能描述:把ASCII字符转换为16进制 //函数说明: //调用函数: //全局变量: //输    入:ASCII字符 //返    回:16进制 / ...

最新文章

  1. C语言中 sscanf 的用法
  2. ASP.NET弹出一个对话框
  3. C语言 将文件内容转换成Dump文件数据格式
  4. boost::geometry::strategy::simplify::douglas_peucker用法的测试程序
  5. LiveVideoStack线上分享第三季(三):大规模视频处理的挑战与应对
  6. sql 没有调试 菜单_MySQL递归查询上下级菜单
  7. 数学课本上的几大变态之处
  8. 【Java学习笔记十】输入输出流
  9. [JLOI2015]管道连接(斯坦纳树)
  10. python深拷贝,浅拷贝,赋值引用
  11. 全球超级计算机500强 中国独占两个第一
  12. 《Docker技术从入门到实践》第3,4,5章(三大概念)
  13. ES6 迭代器与生成器(非常详细、容易理解)
  14. x230键盘排线怎么拆_【HQP教程】记一次X230更换X220键盘
  15. teamviewer或向日葵远程ubuntu系统不能调节屏幕分辨率
  16. 计算机萌新适合学安卓,老学姐呕心沥血整理的大学必备的软件!萌新赶紧收藏...
  17. 常用开发软件下载网站集合
  18. 多目标优化——帕累托最优
  19. like功能以及check功能
  20. Omi官方插件系列 - omi-transform介绍

热门文章

  1. 中小微企业如何选择图纸管理系统?
  2. 攻防世界Misc入门题之坚持60s
  3. 创维 IPTV E900刷机DIY最详指南
  4. 超详细教程-爬取网站内容生成HTML文件/pdf文件
  5. DNS原理及解析过程详解
  6. LeetcCode 27:移除元素 Remove Element(python、java)
  7. 最新CAD、3Dmax下载安装使用教程
  8. RAW图像:安卓手机拍摄 Matlab数据读取
  9. 会声会影X9无法正常启动0xc000007b
  10. 网赚项目,什么才是长期有效的引流方法?