当你通过浏览器,打开某个网站,即某个url地址的时候,你所能正常看到网页的内容,各种文字,都可以正常显示,且没有显示乱码。
此过程,涉及到,浏览器帮你正确解析HTML源码,其中涉及到HTML网页源码的字符编码处理方面的问题。
和字符编码处理相关的大概逻辑是:
1.浏览器访问对应的url地址,并获取对应的HTML(或者,以及,其他的css,javascript等)网页源码
2.浏览器识别解析HTML源码内容
其中包含了解析HTML的头部(head),找到对应的charset和Content-type
head中把Content-type设置为“text/html”。head让浏览器将该响应内容以HTML形式呈现,而不是以文件形式下载它。
然后把根据charset所指示的字符编码类型,去解码对应的HTML内容,显示对应的文字,以保证不是乱码,可以正确的显示文字信息;
举个例子:
当我们通过浏览器,去打开对应的url地址:http://sports.sohu.com/
浏览器可以正常显示对应网页内容:
而此时内部发生的过程是:
1.浏览器去访问url地址:http://sports.sohu.com/去获得对应的HTML源码。(中间很有很多处理过程,省略,具体参考:当你在浏览器地址栏输入一个URL后回车,将会发生的事情?)
2.然后解析HTML源码并显示给用户
其中包括了解析HTML的head,知道content=text/html,charset=gb2312,然后用gb2312编码格式去解码,HTML形式呈现,然后就可以正常显示HTML中的内容,确保不是乱码了。
上面截图就是网页源代码,我们可以很清楚的看到我们要的信息。
注意:
1.之前就看到某处说过,有个别的html网页本身做的不规范,导致本身自己声明的是某种编码类型,
但是实际上,并不全是该类型的编码,导致你去按照其所声明的编码去解析,有时候仍会出现乱码。
比如,其html中明明写的是charset=gb2312,但是实际上,其部分字符是属于GBK的,导致你按照gb2312去解码,有些字符仍会是乱码,
而安装gbk去解码,就全都正常显示了,没有乱码了。即实际上应该是charset=gbk。
常见的HTML编码类型:
国内的网站,尤其是以前建的,好像很多还是GB2312(charset=gb2312),或者是GBK(charset=gbk)
但是越来越多的,都是采用兼容性更好的,包含字符更多的UTF-8编码的了(charset=utf-8)
国外的完整,如果只是某种语言的,比如英文的,好像也有采用iso8859-1的(charset=iso8859-1),同样,更多的网站,还是采用的是utf-8的。
总结:
- 国内外的多数网站,都是采用charset=utf-8
- 部分国外网站采用charset=gb2312或charset=gbk
- 部分国外网站采用某种自己所属语言的编码,比如charset=iso8859-1