字符: 各种文字和符号的总称,如一个符号,一个字母
字符集:表示所有字符的集合,就相当于一个二维表,收录能显示的所有的字符。常见的字符集合有ASCII,GB2312,GBK,GB18030,BIG5,Unicode
编码:将字符转化为计算机系统可以识别的数的规则。
解码:将计算机可以识别的数字,用一种规则展现成字符。

ASCII字符集和ASCII编码(单字节)
ASCII(American Standard Code for Information Interchange)美国信息交换标准码。基于拉丁字母的一套电脑编码系统,主要显示现在英语以及常用的一些西方符号。使用7位二进制码表示一个字符,总共表示127个字符。由于一些西欧国家的需要,对于ASCII码做了扩展位EASCII,使用8位表示一个字符,总共可以表示256个字符。

GBXXXX字符集和BIG5(双字节)
当计算机传到了东亚国家,国际的标准被秒杀了。所以不同的国家还是沿用继续扩大ASCII的这个二维表,由于一个字节的八位是显然不够用的,所以出现了双字节编码。不同国家又出现了不同的编码标准。GB2312中国国家标准简体中文字符集对于汉字的编码,使用两个字节表示,仅仅只表示常用的6763字和非汉字682编码。对于繁体字却还是不支持,所以就出现了港台的BIG5以及日本的Shift_JIS。
当然,6763个汉字是不能满足要求的,所以微软发明了GBK,利用GB2312未使用的编码空间进行编码。总共收录了883个符号, 27533个汉字及提供了1894个造字码位。但是并非国家编码标准未被采用,却是微软的,影响较大。后来的GB18130-2000兼容了GBK,GB18130-2005增加我国少数民族文字的超大型中文编码字符集。在GB18030-2000的基础上增加了42711个汉字和多种我国少数民族文字的编码共收录汉字70244个。GB18030-2005标准收录的字符分别以单字节、双字节或四字节编码。GB 18030-2005主要有以下特点:

与UTF-8相同,采用多字节编码,每个字可以由1个、2个或4个字节组成。
编码空间庞大,最多可定义161万个字符。
支持中国国内少数民族的文字,不需要动用造字区。
汉字收录范围包含繁体汉字以及日韩汉字

此时,问题好像解决了,想显示中文,有GB系列,想显示英文有ASCII或者EASCII。各自在本地访问都是没问题的,但是一旦出现在网络中,使用不同的编码方式,互相访问是出现乱码的。每个字符集就是使用了不同的表,每个字符在每个表中的排列顺序不一样,所以一个字符使用GBXXXX编码,使用UTF-8解码就会找不到字符,或者说显示奇怪的字符,就会出现乱码.
Unicode
因此出现了强大的Unicode,将大量的字符都收录在这里,包括汉字,等各个国家常用的字符。在这个字符集里面,所有的字符编码都是唯一的。
UTF-8,UTF-16以及UTF-32都属于Unicode的一种实现方式。
uTF-8是一种可变长的编码方式,表示范围是1~4个字节。UTF-16和UTF-32每个字符用分别表示2或者4个字节和四个字节表示。
它的编码方式也比较简单。比如汉字‘严’,它的unicode十六进制数是4E25,转换成二进制数有15位(100111000100101),至少需要两个字节。有的需要三个四个字节的,怎样区分哪几个字节是表示的一个字符?
所以,UTF-8采用的可变长编码的规则是:

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
———————-+———————————————
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

(1)在Unicode中的十六进制数,如果是单字节的符号,第一位设置为0,其余7位表示在ASCII表中的位置。
(2)对于n字节的字符,其用n个字节表示,其中高位字节的前n位用1表示,第n+1位为0,其余的n-1个字节前两位
都用10表示。其余部分将该字符的Unicode十六进制转化为二进制,从对应低位到高位依次填充,不够补0.
比如严字的Unicode为4E25,在
0000 0800-0000 FFFF之间,对应的二进制数为100111000100101,所以编码结果

 11100100 10111000 10100101

转化为十六进制就是E4B8A5。

Unicode和UCS
历史上, 有两个独立的, 创立单一字符集的尝试. 一个是国际标准化组织(ISO) 的 ISO 10646 项目,此标准所定义的字符集,称作为通用字符集(Universal Character Set,UCS)另一个是由(一开始大多是美国的)多语言软件制造商组成的协会组织的 Unicode 项目 . 幸运的是,1991年前后, 两个项目的参与者都认识到, 世界不需要两个不同的单一字符集. 它们合并双方的工作成果,并为创立一个单一编码表而协同工作. 两个项目仍都存在并独立地公布各自的标准, 但 Unicode 协会和ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 标准的码表兼容, 并紧密地共同调整任何未来的扩展.我们平时会看到UCS-2,UCS-4,就是对应的ISO 10646标准中所定义的,对应的用2个字节或4个字节去表示同一个字符。

常见的乱码问题以及解决办法
1 本地打开的文件出现乱码
问题描述:
在一个编辑器中的文件,在另一个编辑器中打开,出现汉字乱码
2 浏览器出现乱码
① 浏览器的解码方式和文档的编码方式不同
② 浏览器和服务器的编解码方式不同

以上问题的解决办法都是统一编码,不过GB18030对于GBK和GB2312是向下兼容的。

字符 字符集 编码 以及乱码相关推荐

  1. Java 字符的 编码 与 乱码 和恢复

    这里写目录标题 常见非Unicode编码 1.ASCII 2.ISO 8859-1 3.Windows-1252 4.GB2312 5.GBK 6.GB18030 7.Big5 8.编码汇总 2.3. ...

  2. 文章已转移到“字符集编码与乱码”分类下

    2019独角兽企业重金招聘Python工程师标准>>> 取消此"乱码探源"分类,之下的文章已经转移到"字符集编码与乱码(我的网站)"下. 也可 ...

  3. JAVA字符流与字符集编码

    http://elf8848.iteye.com/blog/271742 问题: 当用JAVA字符流向硬盘写一个a.txt文件时,默认情况下a.txt 会使用什么字符集编码? 分析: "字符 ...

  4. 你不知道的 字符集和编码(编码字符集与字符集编码)

    我的上篇文章,有朋友提出字符集和编码的区别,我在此立文和大家讨论下 常说的字符集和编码区别,其实就是编码字符集和字符集编码的区别,其实,单单如果只是说字符集,没有任何编码的概念的话,那么字符集其实仅仅 ...

  5. 计算机底层存储字节还是字符,彻底搞懂乱码——字符,字节和编码

    级别:中级 摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解.举例说明了一些实际应用中,编码的实现方法.然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱 ...

  6. 字符集编码 idea解决乱码

    文章目录 字符集编码 idea解决乱码 字符编码原理 字符集编码 ASCII字符集 共收录128个字符,包括空格.标点符号.数字.大小写字母和一些不可见字符.由于总共才128个字符,所以可以使用1个字 ...

  7. (转)字符集编码标识符,数字表示字符编码

    原文出处:https://www.qqxiuzi.cn/wz/zixun/1709.htm 关于ANSI编码:这是一种延伸编码方案而非特定编码,不同语种对它的定义都不同,例如简体中文ANSI代表GBK ...

  8. mysql设置字符集 php_MySQL字符集编码设置与PHP显示乱码的解决办法

    转自:博客水木 http://shuimu.js.cn/mysql-php-character-set-encoding-settings-and-garbled-solution.html PHP显 ...

  9. php 使用css乱码,分享CSS字符编码引起乱码快速解决的方法

    下面小编就为大家带来一篇分享CSS字符编码引起乱码快速解决的方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 乱码引起的CSS失效原理: 由于一个中文是两个字符组成, ...

最新文章

  1. 基于IPSec的×××配置实验
  2. hadoop高速扫盲帖,从零了解hadoop
  3. 利用find同时查找多种类型文件
  4. mysql数据库常见问题_初学者必读 MySQL数据库常见问题汇总
  5. fir滤波器课程设计matlab,Matlab课程设计---FIR数字滤波器
  6. 笑话(12) 内裤都磨破了
  7. qtxlsx编译报错_Qt5安装Qxlsx模块,以及Qxlsx模块的简单使用,附资源例程下载
  8. 程序的内存分配----变量在可执行文件中的内存区分配
  9. paip.python错误解决10
  10. Struts2.0 + Spring2.5 + Hibernate3.3开发环境的配置(1)
  11. 网站地图在线生成html
  12. Android应用签名方法
  13. RK3399外设驱动之MIPI
  14. 双因素方差分析和单因素方差分析
  15. win10计算机怎么拨号上网,Win10怎么设置自动连接宽带_Win10怎么设置自动拨号连接上网-192路由网...
  16. 谈谈UG二次开发程序入口
  17. Zoommy for mac最新免费版(图片素材搜索下载软件)
  18. margin外边距合并问题以及解决方式
  19. 孙鑫java视频教程笔记
  20. 大坝平台结构——志豪未来科技有限公司

热门文章

  1. Matlab基本函数-exp函数
  2. word选中文本后按backspace键不能删除问题
  3. ZZULIOJ-1010,求圆的周长和面积(Java)
  4. hostapd wpa_supplicant madwifi详细分析(九)——wps原理及实现 一
  5. deepin V20无法连接蓝牙鼠标
  6. libvirt-qemu-虚拟机内存分配和内存热插拔
  7. 《J2SE 回炉再造16》-------溺水狗
  8. jquery发送手机 验证码倒计时插件 支持页面刷新
  9. 11-k8s结合Metrics-Server实现自动伸缩
  10. 【Proteus仿真】【51单片机】交通灯控制系统设计