`

浏览器编码

阅读更多

       很长一段时间莫有更新了,今天收集了一些关于页面编码的文章,并咨询了业内高手,有了这篇文章,帮大家梳理一下关于浏览器编码这一块的信息。
       在页面显示的时候,有时就可能出现乱码的情况。通过之前那篇文件可以知道乱码的缘由就是其编码转换时的错误,
本来是GBK的存储方式,却用UTF-8的方式去读取,那页面不得不出现乱码了。


       W3C规范中:
      The document character set, however, does not suffice to allow user agents to correctly interpret HTML documents as they are typically exchanged -- encoded as a sequence of bytes in a file or during a  network transmission. User agents must also know the specific character encoding that was used to  transform the document character stream into a byte stream.
 
        在转换的时候,我们得明确传过来的字节流或文件的编码,而浏览器通过什么样的方式识别编码?


        Also, protocol headers, attributes, and parameters referring to character encodings share  the same name -- "charset" --and use the same values from the [IANA] registry 。
        通过协议头部,或属性或参数来指定charset

 

        当请求的时候,user agent 会提供一个accept-charset的属性发到服务端,这样服务端也就知道可以采用什么样的编码 发送回去。现在的服务器有更不错的方式,可以自己设置编码,这样的结果是编码有可能会错误,而出现乱码。服务端设置编码 是在HTTP的消息头部header中申明 Content-Type:text/html;charset=UTF-8这样的方式,而如果不设置,则浏览器就通过另外的方式去 寻找页面的编码。
 
        当http头部的charset未设置,或者字符编码不能识别的时候(比如没有在[IANA]中注册过)的时候,浏览器会解析HTML文档 当解析到<meta 标签的时候,若含有代码 

      <META http-equiv="Conten-Type"content="text/html;charset=UTF-8">

 

 

       注意:这里要注意一个地方,若http头部charset未设置,浏览器会开始去解析HTML文档,如果<meta标签之前有非ANSI字符解析为乱码,则meta标签可能就解析不到,所以如果设置其meta,请在head中尽早出现。 (这里其实还是有一个小问题没解决,浏览器在发现charset未设置的时候,然后以何种编码解析HTML文件,这个有待争议,下次 测试才知道)


 从以上可以得知:
  关于页面的编码决定顺序:
  1.如果HTTP头部申明了charset,则会使用HTTP头部的,
  2.让HTTP头部莫有使用,或charset不可识别,则会去解析meta标签的,
  3.如果meta也没有的话,则会使用自动检测,如果用户允许的话, 
  4.否则 会使用本地UI的字符编码。
  
  关于CSS文件的编码决定顺序:
  根据 CSS 2.1 规范的描述,应按照以下优先级来确定一个外部 CSS 文件的编码:
  1.HTTP 响应头中 "Content-Type" 字段的 "charset" 参数指定的编码。
  2.BOM 以及/或者 @charset 定义的编码。
  3.<link charset=""> 或其他链接机制提供的元数据(如果有的话)指定的编码。
  4.引入该 CSS 文件的 HTML 或另一个 CSS 文件(如果有的话)中已确定的编码。
  5.如果以上几步都没能确定编码,则假定其编码为 UTF-8。
   
   而JS文件的编码决定顺序应大致不差,如同页面一般,未证实。找到相关的规范或官方文档后确定
  
  所以关于页面编码建议的模式如下:  
  1,尽量将页面保存为UTF-8;
  2,要申明文档使用的编码,如果可能,对HTTP header进行设置;
  3,在外部css文件中使用@charset规则,当css中包含非ANSI的内容;
  4,避免使用BOM在用UTF-8的时候,保证HTML代码是Unicode无BOM的正规化保存;
  5,尽量避免使用转义字符。
  总结转自http://www.w3.org/International/tutorials/tutorial-char-enc/

 

 浅见,欢迎大家指正。 

 

 

分享到:
评论
11 楼 zhangxiao_0000 2015-04-27  
[url='javascript&#58;'][/url]
10 楼 zhangxiao_0000 2015-04-27  
9 楼 zhangxiao_0000 2015-04-27  
[url='javascript:ALERT('xss');'][/url]
8 楼 zhangxiao_0000 2015-04-27  
7 楼 zhangxiao_0000 2015-04-27  
6 楼 zhangxiao_0000 2015-04-27  
5 楼 zhangxiao_0000 2015-04-27  
4 楼 zhangxiao_0000 2015-04-27  
[url ]dd[/url]
3 楼 int08h 2011-03-23  
正如你所说,BOM这东西其实在浏览器中还是以“绝对悲剧”的角色存在着,多数情况下HTML页面里有BOM的话,直接导致doctype无法识别(因为doctype的要求是前面没有除换行外的其他字符)
不过我确实对w3c的规范阅读很少,几乎都集中在看HTML5 Reference了,有所欠缺啊~
2 楼 every_best 2011-03-23  
^_^  谢谢大大的补充~
 

  关于BOM的检测,在W3C的规范文档中,BOM并没有在识别编码的范围内,查找了一下您提出的规范,原来是来源WHATWG.
http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#charset
  
  看了关于规范前面的说明:
  This specification is intended to replace (be the new version of) what was previously the HTML5, HTML4, XHTML1, and DOM2 HTML specifications.
  以及关于各浏览器关于此特性的实现程度说明:
  大致都为 Lastest *** beta:  has nearly complete support for this feature,but does not yet pass all the relevent test cases; 09-10-23
  
  浏览器各版本也会有不同的实现方式。
1 楼 int08h 2011-03-23  
浏览器识别编码有3种方式:
1、HTTP头的Content-Type
2、meta标签(有2类meta标签可以设置编码)
3、BOM

当前面这3种都不存在时,浏览器默认使用US-ASCII编码,而不是UTF-8,至少标准是这么解释的,当然浏览器可能不以标准为参考:
引用
If the document does not start with a U+FEFF BYTE ORDER MARK (BOM) character, and if its encoding is not explicitly given by a Content-Type HTTP header, then the character encoding used must be an ASCII-compatible character encoding, and, in addition, if that encoding isn't US-ASCII itself, then the encoding must be specified using a meta element with a charset attribute or a meta element in the encoding declaration state.


当使用编码时,必须时刻注意这个编码必须是在INAA中有注册的,比如UTF-8就必须写UTF-8,虽然部分浏览器识别UTF8(少一个“-”),但在另外一部分浏览器下就可能出错
另外INAA明确指出了,编码名称大小写不敏感
引用
However, no distinction is made between use of upper and lower case letters.


另外当使用meta标签指定编码,即HTTP头和BOM都不存在时,编码必须是一个ASCII编码的超集,也就楼主说的有可能会找不到meta标签的情况

另外标准不允许使用以下的编码,但问题是浏览器竟然能解析UTF-7等编码,导致一些安全问题:
UTF-32, JIS_C6226-1983, JIS_X0212-1990, HZ-GB-2312, JOHAB, ISO-2022系列, EBCDIC系列, CESU-8, UTF-7, BOCU-1, SCSU

最后,如果是XML型(如XHTML),需要用XML声明来指定编码,如
<?xml version="1.0" encoding="UTF-8"?>

相关推荐

    ChatGPT多御浏览器编码开发

    下载浏览器使用即可,无需再安装!!! 我使用ChatGPT编写了一个线性回归算法,并在10秒钟内完成了它。该算法的代码输出效率快,还带有注释,直接复制到编辑器里面就可以运行,而且没有出现任何错误。这让我感受到了...

    Chrome浏览器编码修改(Charset扩展程序)

    谷歌浏览器Charset扩展程序,下载完之后解压,将Charset_v0.4.1.crx文件拉到扩展程序页面,详情请转到https://blog.csdn.net/dong__CSDN/article/details/80668177

    一个易语言自制浏览器的基本代码

    这是本人自制的最简单的浏览器,基于易语言的易浏览器开发。

    mmWebViewer_:这是一个js文件,如果内容字体不等于浏览器字体,它将检查Web内容并转换为浏览器编码。 它使用Parabaik Converter,缅甸字体Tagger脚本(由Ko Thant Thet Khin Zaw设计),MUA Web Unicode Converter(用于内容检查)和Ko Ei maung的浏览器字体检测方案

    thixpin缅甸网页浏览器这是一个js文件,如果内容字体不等于浏览器字体,它将检查Web内容并转换为浏览器编码。 它使用了Parabaik Converter,缅甸字体Tagger脚本(由Ko Thant Thet Khin Zaw编写),sanlinnaing的...

    chrome设置编码插件: chrome://extensions/

    在日常使用中,了解和掌握如何正确设置浏览器编码是非常实用的技巧。对于开发人员来说,调试跨编码问题或者处理非标准编码的网页时,这样的插件能极大地提高工作效率。而对于普通用户,偶尔遇到的编码问题也能通过...

    电脑浏览器出现乱码怎么办.docx

    - **手动调整浏览器编码**: - 在浏览器中打开出现问题的网页。 - 使用快捷键 `Ctrl+U` 查看网页源代码,找到 `&lt;meta&gt;` 标签中的 `charset` 属性值,确定网页的实际编码格式(如 `utf-8`、`gb2312` 等)。 - 在...

    在win7旗舰版电脑中打开网页出现乱码情况怎么办?.docx

    浏览器编码是指浏览器用来识别网页上的字符编码的方式。不同的浏览器可能具有不同的编码方式。 3. 网页编码 网页编码是指网页上的字符编码方式。不同的网页可能使用不同的字符编码方式。 六、结语 Win7旗舰版...

    新版谷歌chrome浏览器修改编码插件

    "Charset+0.1.crx"是一款专门为新版谷歌Chrome浏览器设计的编码修改插件。它的主要功能是帮助用户轻松解决网页字符编码不匹配的问题,确保网页内容能够正确地显示。在访问一些使用GB2312、GBK或者其他非Unicode编码...

    chrome扩展Charset.rar

    总之,“Chrome扩展Charset”是解决Chrome浏览器编码问题的有效工具,它通过提供手动调整字符集的功能,确保用户能够无障碍地浏览各种编码格式的网页。对于经常遇到网页乱码问题的用户来说,这是一个非常实用的解决...

    permutation:浏览器中的实时模式编码

    浏览器中的实时模式编码 这是什么? 排列基本上是一个在线复制,其中一些库的功能直接可用,目的是提供一种在浏览器中进行实时编码试验的方法。 以下库中的函数可直接在排列的编辑器/repl 事物中使用: 此外,排列...

    Chrome-Charset-0.5.4.zip

    Chrome-Charset-0.5.4.zip 是一个包含Google Chrome浏览器编码插件的压缩包,主要目的是解决在Mac OS操作系统中使用谷歌浏览器时可能出现的中文乱码问题。这个插件的出现是为了增强浏览器对不同字符编码的支持,确保...

    中文档名网页阅读解决方法.pdf

    - **设置浏览器编码**:用户可以在浏览器的查看菜单中选择“编码”选项,手动设定为“自动检测”或“简体中文”(GBK)或“繁体中文”(BIG-5),以适应不同的网页编码。 - **服务器端配置**:服务器需要正确配置以...

    C/C++常用工具函数类 - 以前累积的一些工具函数源码

    获得当前程序的路径、获得ini文件内容、设置ini文件内容、获得ini的节点名称、校验文件/路径是否存在、创建路径、获得/写入文件内容/遍历文件夹、...源码、根据数组规则抓取网页内容、浏览器编码转换、剪切板操作等等...

    Linux下网页乱码解决方案

    修改浏览器编码设置 大多数现代浏览器允许用户手动选择网页的编码方式。在遇到乱码时,尝试更改浏览器的字符编码设置,如从“自动检测”更改为“简体中文(GB2312)”、“繁体中文(Big5)”或“UTF-8”等,可以...

    IE繁体字库在IE中显示BIG5码繁体汉字

    2. 设置浏览器编码:在IE浏览器中,用户可以在页面打开后,查看页面的编码设置。如果发现不是BIG5,可以手动更改为BIG5,通常在菜单栏的“查看”&gt;“编码”选项中进行选择。 3. 使用第三方插件:如果以上方法仍不能...

    jsp中在提交表单时的中文处理问题

    这是因为Web应用中涉及到多种编码格式,包括浏览器编码、HTTP请求编码、服务器编码等,如果这些编码不一致,中文字符就可能显示为乱码。下面将详细解释如何在JSP中正确处理中文表单提交的问题。 首先,了解基本的...

    解决了浏览器URL地址栏直接输入get参数值包含中文时的urlencode编码格式问题

    并且这个格式居然不能再这个函数里面设置,导致这个结果不可控制,在不同浏览器环境下面结果不同,不能得到自己想要的格式编码。在搜索引擎里面找了很长时间,都没有找到解决这个问题的办法,没办法,只能自己手动...

    深入剖析Java 编程中的中文问题及建议最优解决方法

    - **浏览器编码**:浏览器通常默认使用UTF-8编码格式传递参数,这与Java程序内部使用的Unicode编码可能不一致,导致中文字符显示异常。 #### 2. JAVA编码转换的详细过程 接下来,我们将深入分析Java程序从编写到...

    bootstrap 3.4.1 中文文档 离线

    bootstrap中文文档,实际上是将bootstrap整个站扒下来了,使用浏览器打开index.htm即可,注意编码格式为UTF-8,如果出现乱码考虑修改浏览器编码。 主要便于离线环境下前端开发使用。 Bootstrap 是最受欢迎的 HTML...

Global site tag (gtag.js) - Google Analytics