六、浏览器乱码的原因是什么?如何解决
6.1 浏览器乱码的原因是?
6.1.1 从编码角度来解释浏览器乱码的真正原因:
在浏览器上查看网页,偶尔会看到一些网站出现乱码的情况。
乱码情况举例既然是乱码,当然要看编码,那什么是编码呢?我们都知道,计算机本质上不就是01组成的一坨东西在运作着么?01这叫二进制,也就是最基本最底层的编码。
计算机只能是二进制的存储,并不能真正存ABCD呀,那就要把字母映射为相应的二进制。
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。
image.pngASCII的局限在于只能显示26个基本拉丁字母、阿拉伯数目字和英式标点符号,因此只能用于显示现代美国英语(而且在处理英语当中的外来词如naïve、café、élite等等时,所有重音符号都不得不去掉,即使这样做会违反拼写规则)。而EASCII虽然解决了部分西欧语言的显示问题,但对更多其他语言依然无能为力。因此现在的软件系统大多采用Unicode。
Unicode(又称:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。
UNICODE 开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于 ascii 里的那些”半角”字符,UNICODE 包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于”半角”英文符号只需要用到低8位,所以其高 8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。但是 现在计算存储空间和计算性能成本相对低了很多,也就不成问题了。
如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失了,这就是Unicode。Unicode规定了每个符号都有自己的二进制码。标准虽是标准,但各平台实现标准的进度不一啊,有的各自为政,这就有问题了。
因此导致乱码的真正原因:就是各平台间对Unicode标准实现不一致(包括实现的时间先后不同,以及Unicode所代表含义不同)。
6.1.2 出现乱码的几种常见场景:
1、比如网页源代码是gbk的编码,而内容中的中文字是utf-8编码的,这样浏览器打开即会出现html乱码。反之网页是编码utf-8,内容是gbk也会出现乱码。
2、html网页编码是gbk,而程序从数据库中调出呈现是utf-8编码的内容也会造成编码乱码。
3、浏览器不能自动检测网页编码,造成网页乱码。
6.2 如何解决?
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1、如果浏览器浏览时候出现网页乱码,在浏览器中找到转换编码的菜单,尝试选择不同的编码方式试一下。
2、如果自己开发网页,必须网页加入meta charset编码标签。
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
或<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ,预先告诉浏览器要选择何种编码方式。这样浏览器就可以直接选择对应的编码方式,以避免乱码的情况出现。
比如该页面:
http://www.jianshu.com/p/54a2cf56a9ba
所用的编码方式是UTF-8,则直接声明了自己的编码方式。
![Upload image.png failed. Please try again.]
那么浏览器在进行页面解析的时候,自动选择的便是UTF-8
image.png参考文章:
网友评论