美文网首页
HTML文档的字符集和编码

HTML文档的字符集和编码

作者: 二号潜水艇 | 来源:发表于2016-08-17 10:30 被阅读128次
    1895-lake

    这是一个老问题-乱码(mojibake)!由于页面的编码问题,经常遇到页面显示乱码的问题,借这个机会理清字符集编码的关系。这里并不对各种字符集和编码的具体实现进行讨论,只是弄清楚他们分别是什么,有什么关系,怎么用。字符集和编码问题并不只在HTML中存在,在XML、Json、CSS、程序源码及文本文件中都会遇到。由于理解比较粗浅,错误的地方欢迎指出。

    怎么用

    这里先介绍HTML里面怎么指定编码。

    随便打开一个网站,都能在head里面看到以下类似代码:

    <head>  
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head> 
    

    浏览器在获取HTML文档后,会根据这段代码指定的编码方式(charset=utf-8)对HTMl文档进行解码,如果HTML文档本身的编码方式和指定的编码方式一致,浏览器将正常的解码并显示字符,如果HTML文档本身的编码方式和指定的编码方式不一致,就会出现乱码。这里HTML本身的编码方式指在保存HTML文档时指定的编码方式,如通过记事本默认保存的编码为ANSI,如果在中国,则就是用的gb2312编码,因此如果charset指定的是utf-8,也会出现乱码。

    • charset=utf-8中的charset并不是字符集的意思,而是指编码
    • 国内最常用的编码方式为utf-8gb2312

    再次强调:HTML文档本身的编码要和HTML中指定的编码一致

    是什么

    平时遇到乱码问题基本都归类为编码问题,实际其中包含了两层意思,从charset的命名也能看出端倪,字符集编码

    字符集

    字符集意思是一类字符的集合,也可以叫字符库,本身并不是编码的概念,如ASCIIUnicode,但是很多字符集本身也代表了一种编码,如gb2312gbk等,因此有时也把这些字符集叫做编码,没毛病。

    编码

    编码是我们平时直接使用的,而字符集我们并不直接使用。

    计算机并不认识这些字符集,他们只认识0和1,因此通过0和1的组合唯一的标示这些字符的规则就是编码,如Unicode对应的编码有utf-8utf-16utf-32,每种编码都有自己的规则,有些兼容有些不兼容。

    这里简单介绍一下Windows记事本中的编码:

    • ANSI指通过多个字节对ASCII进行扩展的、跟本地相关的编码方式的统称,在大陆就是gb2312,在台湾就是big5,在日本就是Shift_JIS
    • Unicode编码实际使用的是utf-16+BOM编码;

    Windows提供了ANSIUnicode的转换,可以通过代码页,实际就是一个映射表,不具体介绍。

    字符集和编码的关系

    上面已经说明了他们之间的关系,这里简单列举一下常用的字符集和编码:

    字符集 编码 长度
    ASCII ASCII 单字节
    Unicode utf-8、utf-16、utf-32 单字节、多字节
    gb2312 gb2312 双字节
    big5 big5 双字节
    ISO-8859-1 ISO-8859-1 单字节
    ISO-8859-* ISO-8859-* 单字节

    参考文档

    相关文章

      网友评论

          本文标题:HTML文档的字符集和编码

          本文链接:https://www.haomeiwen.com/subject/hxjmsttx.html