乱码的由来

看了很多关于乱码的文章,总觉得不够清晰,看的云里雾里。在一本书上看到解释还比较清楚,摘下。

计算机中,字符都是以二进制的数字来存储的,这种字符与数字对应的关系就被称为字符的编码。例如"A"对应的编码是65,这个65就是"A"的ASCII编码。

从计算机的字符编码发展历史来看,大概经历了三个阶段。

(1)第一个阶段是ASCII英文编码阶段,这个时候只支持英语,其他语言不能够在计算机上存储和显示。

(2)第二个阶段是ASCII多种语言编码的阶段,为使计算机支持更多语言,通常使用多个ASCII码组合来表示一个字符,例如汉字通常使用2个字节的ASCII编码来存储。这种编码方式称为ANSI编码。但是,不同的国家和地区制定了不同的标准,由此产生了GB2312,BIG5,JIS等各自的编码标准。在简体中文系统下,ANSI编码代表GB2312编码,在日文操作系统下,ANSI编码代表JIS编码。不同ANSI编码之间互不兼容。如果保存和打开的编码方式不同,就会出现乱码的情况。

(3)第三个阶段是Unicode阶段。为了使国际间信息交流更加方便,国际组织制定了Unicode字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换,处理的要求。现在大部分的操作系统和语言都提供了对Unicode的支持。

Unicode编码时,每个字符会占用4个字节的空间。如果字符中存在大量的英文字母,无疑使用Unicode会浪费许多资源,因此Unicode的编码方式也出现了许多中分化,UTF-8是其中最灵活和常用的编码之一,它在表示传统的ASCII字符时依然只是用1个字节存储,而其他字符不变。这种方式可以节约空间,还可以保证向后与ASCII兼容。

俗话说解铃还须系铃人,要保证能够正确的解释字符,不出现乱码的情况,关键在于选择正确的编码方式进行解码。

时间: 2024-08-05 07:33:11

乱码的由来的相关文章

重学计算机组成原理(十)- "烫烫烫"乱码的由来

程序 = 算法 + 数据结构 对应到计算机的组成原理(硬件层面) 算法 --- 各种计算机指令 数据结构 --- 二进制数据 计算机用0/1组成的二进制,来表示所有信息 程序指令用到的机器码,是使用二进制表示的 存储在内存里面的字符串.整数.浮点数也都是用二进制表示的 万物在计算机里都是0和1,搞清楚各种数据在二进制层面是怎么表示的,是我们的必修课. 在实际应用中最常遇到的问题,也就是文本字符串是怎么表示成二进制的,特别是我们会遇到的乱码究竟是怎么回事儿 在开发的时候,所说的Unicode和UT

python中乱码怎么由来与解决方法

前言曾几何时 Python 中文乱码的问题困扰了我很多很多年,每次出现中文乱码都要去网上搜索答案,虽然解决了当时遇到的问题但下次出现乱码的时候又会懵逼,究其原因还是知其然不知其所以然.现在有的小伙伴为了躲避中文乱码的问题甚至代码中不使用中文,注释和提示都用英文,我曾经也这样干过,但这并不是解决问题,而是逃避问题,今天我们一起彻底解决 Python 中文乱码的问题. 基础知识ASCII很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态

乱码问题引申 python 中string和unicode

HtmlTestRunner的乱码问题 1生成的报告中,对print打印的数据都记录下来,但是数据有些会存在乱码.如下面.有些又没有乱码. 这到底是怎么回事呢? str=t.encode('utf-8') print str 第一个test我以utf-8编码,看来htmlTestRunner不是utf-8 编码. 为何第二个正确了呢? 第二个是unicode编码方式. 也就是说,可以被其他任何encode了. 原码中已这个进行编码,也就是说他设置为latin-1这种编码方式了.估计是作者自己国家

java 中文显示乱码

问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII码, 中国的 GB2312-80,日本的 JIS 等,作为该国家/区域内信息处理的基础,有着统一编码的重要作用.字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类.早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本 (L10N),为了区分,引进了 LANG, Codepage 等概念.但是由于各个本地字符集代码范围重叠,相互间信息交换困难:软件

客户端..服务器乱码问题

乱码问题由来:客户端和服务器编码格式不一致,用comcat的时候是由comcat容器造成的. 解决办法:一.设置编码格式get提交的:容器对get统一采用ISO8859-1String value = request.getParameter(name);value = new String(value.getBytes("ISO8859-1"),"UTF-8");采取下边的post设置响应字符集的编码格式无效:因为这种方式设置的是消息体的格式,get方式提交的(没

你不知道的 页面编码,浏览器选择编码,get,post各种乱码由来

asp.net页面编码和浏览器的选择编码 每个asp.net的写手都知道,在新版本的visual studio,在没有任何设置的情况下,新建页面时的默认编码位utf-8 我们可以从两个地方可以看出: 第一:打开aspx页面,“文件”->“高级保存选项”,如下图,可以看出编码为:Unicode(UTF-8带签名) 第二:找到aspx存放路径,用系统自带的文本编辑器打开,然后“文件”->"另存为",如下图,可以看出编码为UTF-8 很多时候我们有很多疑问,我们经常在aspx页面

jsp与servlet中文乱码问题(转)

大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考.首先了解一下Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题.首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流

关于windows下程序开发的中文乱码问题小结

笔者遇到的问题背景: windows 下使用notepad++6.7 ,ftp连接远程ubuntu主机,在本地创建远程主机文件,编辑后上传出现中文乱码. 笔者最开始不明白问题出在哪,因为设置了在notepad++中默认使用UTF-8编码格式进行新建文件,但依旧无效. 笔者一步步探索问题: 新建一个文件,写入纯英文html文本后上传至ubuntu主机,vi :set fileencoding显示此时为utf-8编码 上述文件新增几个中文,保存后上传至ubuntu主机,这个时候提示fileencod

Tomcat中文乱码问题的原理和解决方法

自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享. 一.Java中文问题的由来 Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题. 首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java