因为编码不对!

什么是编码?编码不对为什么会乱码?

……??

编码转换为什么会丢失数据?

……??

不管是数据库还是网页,都可能碰到过乱码问题

在计算机世界里,所有数据都使用二进制存储,即只有1和0,在人的世界里有中文/英文/阿拉伯文等,还有图片/视频/音频,如何使用二进制存储和显示它们呢?具体使用哪些二进制字符表示哪个符号的这样一种规则就叫编码。编码充当着一个翻译的角色,计算机是美国人发明的,为了存储他们使用的语言abcd等26个英文字母以及常用的符号~!@#¥%……&*()-+,美国有关标准化组织出台了ASCII编码,但是,ASCII编码是单字节编码系统,最多只能表示256个字符,因此ASCII只适用于拉丁文字子母,而其他国家有各种各样的语言文字,比如中文字符有好几万个,于是有了GB2312双子节编码。

GB2312适用于汉字处理、汉字通信等系统之间的信息交换,GB2312共收录6763个常用中文和非汉字图形字符682个,由中国国家标准总局于1980年发布,随着汉字标准的发展,GB2312收录的6千多字明显不够用了,1995年又发布了GBK编码,GBK是GB2312的扩展,向下兼容GB2312编码,GBK编码共收录了21003个汉字。

观察ASCII会发现,ASCII编码只能表示寥寥256个字符,而GB2312共收录6千多个字符,假如想用ASCII编码来表示六千多个中文,很明显ASCII里面并没有与中文对应的映射关系,所以就显示乱码了。

每个国家都有自己相应的编码规则,为了解决编码不统一的问题,Unicode编码方案应运而生。Unicode也叫统一码或万国码,它是计算机科学领域里的一项业界标准,Unicode把所有语言都统一到一套编码里,以满足跨语言、跨平台进行文本转换、处理的要求,这样就不会再有乱码问题了,它于1994年正式公布。UTF8就是Unicode编码方案的一种。

UTF8的长度是1-4位(最初是1-6位),GB2312长度是2位,一个长度为3位的UTF8字符转换成GB2312就会丢失信息,显示乱码,再转换回UTF8也无济于事,因为信息已经丢失。这就是我们有时候在转换编码的时候乱码的原因。 

作者:王美建
出处:http://www.cnblogs.com/wangmeijian

本文版权归作者和博客园所有,欢迎转载,转载请标明出处。

如果您觉得本篇博文对您有所收获,请点击右下角的 [推荐],谢谢!

网页为什么会乱码?浅析字符集编码ASCII和Unicode的更多相关文章

  1. 2.数码相框-编码(ASCII/GB2312/Unicode)介绍,并使LCD显示汉字字符(2)

    在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Unicode编码 2)写应用程序,使LCD显示汉字和字符 大家都知道,数据传输的是二进制,而字符和汉字 ...

  2. 编码 ASCII, GBK, Unicode+utf-8

    0. 1.参考 网页编码就是那点事 阮一峰 字符编码笔记:ASCII,Unicode 和 UTF-8 2.总结 美国 ASCII 码 发音: /ˈæski/ :128个字符,只占用了一个字节的后面7位 ...

  3. 字符编码 ASCII、Unicode和UTF-8的关系

    摘抄自廖雪峰 教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机 ...

  4. Java 字符编码 ASCII、Unicode、UTF-8、代码点和代码单元

    1 ASCII码 统一规定英语字符与二进制位之间的关系.ASCII码一共规定了128个字符的编码.例如,空格“SPACE”是32(二进制00100000),大写字母A是65(二进制01000001). ...

  5. 2.数码相框-编码(ASCII/GB2312/Unicode)介绍

    转载:https://www.cnblogs.com/lifexy/p/8485634.html 在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Uni ...

  6. 【基础】字符编码-ASCII、Unicode、utf-8

    一.各自背景 1. ASCII ASCII 只有127个字符,表示英文字母的大小写.数字和一些符号.但由于其他语言用ASCII编码表示字节不够,例如:常用中文需要两个字节,且不能和ASCII冲突,中国 ...

  7. 字符编码(ASCII,Unicode和UTF-8) 和 大小端

    本文包括2部分内容:“ASCII,Unicode和UTF-8” 和 “Big Endian和Little Endian”. 第1部分 ASCII,Unicode和UTF-8 介绍 1. ASCII码 ...

  8. 字符编码(ASCII,Unicode和UTF-8) 和 大小端(zz)

    本文包括2部分内容:“ASCII,Unicode和UTF-8” 和 “Big Endian和Little Endian”. 第1部分 ASCII,Unicode和UTF-8 介绍 1. ASCII码 ...

  9. 字符编码ASCII、Unicode、GB

    计算机的存储都是二进制的,那么我们平时看到的各种字符都需要通过按照一定的格式转换成为二进制才能在被计算机识别与处理.这个过程便成为编码.常见的编码方式有ASCII.Unicode.GB2312等. 1 ...

随机推荐

  1. mysql删除完全重复数据保留一条

    CREATE TABLE tmp AS (SELECT DISTINCT * FROM oa_organization);--将不重复的数据存入新建临时表tmp DELETE FROM oa_orga ...

  2. 十.iSCSI网络磁盘

    默认端口:3260 • Internet SCSI,网际SCSI接口 – 一种基于C/S架构的虚拟磁盘技术 – 服务器提供磁盘空间,客户机连接并当成本地磁盘使用   • backstore,后端存储 ...

  3. 超过20g的文件+上传

    demo下载地址:jsp-Eclipse,jsp-MyEclipse,PHP,ASP.NET 教程:ASP.NET,JSP,PHP 一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件 ...

  4. faebdc的烦恼 莫队

    faebdc的烦恼 莫队 题面 思路 有点难想的莫队. 首先我们肯定要一个cnt[i]记录难度i出现的次数,但是我们发现每次删去一个难度后,如果那个难度的个数恰好是当前最多次数,我们就可能要更新一下答 ...

  5. nginx + keepalived双活配置

    一.安装nginx 我们这边默认安装的nginx的是1.12.2的版本,所以我们需要安装1.16.1版本的nginx的,才好,所以我们这边先更新yum源,步骤如下: 1.添加yum源: [root@s ...

  6. maven管理的jsp-web应用如何添加servlet、jsp相关依赖(org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp)

    明明tomcat下面就有这些包,然而还需要在maven依赖里面加上这个依赖 <!--引入Servlet开始--> <dependency> <groupId>jav ...

  7. VTK 简单点云数据显示绘制

    基于vtkPolyData,绘制时除了输入点坐标,还需要通过setVerts指定点绘制信息. simplePoints.txt的内容为简单的 xyz,如: 20 20 20 20 20 30 20 2 ...

  8. python踩坑记录篇,持续更新

    问题1:python语法错误 错误日志如下: print(a[2])    ^IndentationError: unexpected indent [解决方案]:缩进代码错误导致,将print的缩进 ...

  9. 1 课务 iOS 概述

    重要注意 紫色解释 蓝色分类 新内容 CS193P 本课老版本 2010 年冬 http://open.163.com/movie/2010/6/C/7/M6RU83DCT_M6RU957C7.htm ...

  10. CF1174F Ehab and the Big Finale(交互+剖分)

    做法 \(x\)为隐藏节点,\(dep_x=d(1,x)\) \((1)\):\(u=1\) \((2)\):重链剖分,比如\(v\)为\(u\)的重链底部,查询\(dis(x,v)\)的长度,\(y ...