网页为什么会乱码?

因为编码不对!

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

……??

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

……??

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

在计算机世界里,所有数据都使用二进制存储,即只有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是计算机科学领域里的一项业界标准,包括字符集、编码方案等,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求,于1994年正式公布。UTF8就是Unicode编码方案的一种。

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

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

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

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

时间: 2024-11-04 23:08:55

网页为什么会乱码?的相关文章

使用HttpWebRequest和HtmlAgilityPack抓取网页(拒绝乱码,拒绝正则表达式)

废话不多说, 直接说需求. 公司的网站需要抓取其他网站的文章,但任务没到我这,同事搞了一下午没搞出来.由于刚刚到公司, 想证明下自己,就把活揽过来了.因为以前做过,觉得应该很简单,但当我开始做的时候,我崩溃了,http请求后,得到的是字符串竟然是乱码,然后就各种百度(谷歌一直崩溃中),最后找到了原因.由于我要抓取的网页做了压缩,所以当我抓的时候,抓过来的是压缩后的,所以必须解压一下,如果不解压,不管用什么编码方式,结果还是乱码.直接上代码: 1 public Encoding GetEncodi

使用 python urllib2 抓取网页时出现乱码的解决方案

这里记录的是一个门外汉解决使用 urllib2 抓取网页时遇到乱码.崩溃.求助.解决和涨经验的过程.这类问题,事后看来只是个极小极小的坑,不过竟然花去很多时间,也值得记录一下.过程如下:目标: 抓取 http://sports.sina.com.cn/g/premierleague/index.shtml 代码: 1 2 3 4 5 6 # coding: u8 import urllib2 url = "http://sports.sina.com.cn/g/premierleague/ind

网页的title乱码问题

把下面这句放到head之间,title要放在这句下面 <meta http-equiv=Content-Type content="text/html; charset=utf-8"> 必须是utf-8 ,如果一不小心写成utf8,在safari中没问题,IE中还是乱码 网页的title乱码问题

抓取网页时,乱码问题

1 def get_content(): 2 user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36" 3 headers = { 'User-Agent' : user_agent } 4 url = "http://bj.58.com/" 5 req = urllib2.Req

phpmyadmin和网页上面的乱码问题

前段时间做了个留言板,但是总是出现乱码,而且出现了无法插入的情况:发现这么个问题:在phpmyadmin里面默认的编码是瑞士的一个编码:我就郁闷了为什么这么一个通用软件的编码放着UTF-8或者是GBK不放放了个不常用的编码.而且这个与刚建立数据库的时候的编码不叠加phpmyadmin和网页上面的乱码问题 - esc_penger - Can You Feel It 这里的整理下面的编码格式如果不是常用格式的话遇到乱码是必须的了,接下来你就该看看你的数据库连接类conn.php里面有没有添加mys

nutch+mysql gb2312网页源代码中文乱码

问题描述: 将nutch爬的网页源代码存在mysql中,网页编码为gb2312的网页中文乱码,其他编码暂未发现问题.因为nutch对爬下的网页源代码content不作任何处理,仅仅保存,而我的mysql编码设置的为utf-8,所以会显示乱码. 现在需要处理网页源代码,取出指定数据,那么java程序如何将gb2312中文乱码的网页源代码转化为非乱码. 解决: 其实采用ResultSet的getBytes方法即可. public void getResoucePage() throws Except

Filter 解决web网页跳转乱码

为什么采用filter实现了字符集的统一编码 问题: 为什么会有字符集编码的问题呢?对于Java Web应用,使用Tomcat容器获取和传递的参数(request.getParameter())默认是iso8859-1编码格式,所以即使我们在页面统一使用中文编码GB2312,在request.getParameter()取得的参数仍会有乱码. 因此我们要对Tomcat获取的参数进行编码转换,采用request.setCharacterEncoding()与response.setCharacte

html乱码原因与网页乱码解决方法

造成html网页乱码原因主要是html源代码内中文字内容与html编码不同造成.但无论是哪种情况造成乱码在网页开始时候都需要设置网页编码. charset编码设置 html网页乱码效果截图 一.乱码造成原因   -   TOP 1.比如网页源代码是gbk的编码,而内容中的中文字是utf-8编码的,这样浏览器打开即会出现html乱码.反之网页是编码utf-8,内容是gbk也会出现乱码. 2.html网页编码是gbk,而程序从数据库中调出呈现是utf-8编码的内容也会造成编码乱码. 3.浏览器不能自

使用notepad++学习python爬虫,print网页中文乱码问题

今天学习使用python爬虫的时候发现爬到的网页中文会乱码,一直网上搜索解决办法,一个一个试验过去,发现还是乱码,然后我就开始使用其它方法测试,用python自带的编辑器打开是正常的,发现是notepad++这款编辑器的问题,我更改了编码方式为utf-8无bom,尝试了所有设置,都没有用,新建,打开文件默认一直都是ansi格式,pynpp这款快捷打开.py格式的插件运行一直乱码,虽然没有发现问题的根源,但是知道编码是没有问题的,主要是这款编辑器出现的一些小问题 不过百度过后发现如果是乱码问题,最