很长一段时间莫有更新了,今天收集了一些关于页面编码的文章,并咨询了业内高手,有了这篇文章,帮大家梳理一下关于浏览器编码这一块的信息。
在页面显示的时候,有时就可能出现乱码的情况。通过之前那篇文件可以知道乱码的缘由就是其编码转换时的错误,
本来是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/
浅见,欢迎大家指正。
分享到:
相关推荐
下载浏览器使用即可,无需再安装!!! 我使用ChatGPT编写了一个线性回归算法,并在10秒钟内完成了它。该算法的代码输出效率快,还带有注释,直接复制到编辑器里面就可以运行,而且没有出现任何错误。这让我感受到了...
谷歌浏览器Charset扩展程序,下载完之后解压,将Charset_v0.4.1.crx文件拉到扩展程序页面,详情请转到https://blog.csdn.net/dong__CSDN/article/details/80668177
这是本人自制的最简单的浏览器,基于易语言的易浏览器开发。
thixpin缅甸网页浏览器这是一个js文件,如果内容字体不等于浏览器字体,它将检查Web内容并转换为浏览器编码。 它使用了Parabaik Converter,缅甸字体Tagger脚本(由Ko Thant Thet Khin Zaw编写),sanlinnaing的...
由于新版chrome浏览器(77以下版本)不能设置字体编码,我找了一个插件和大家一起分享,插件安装的方式自行搜索。 高版本请移步 https://download.csdn.net/download/King_flag/11998490 如果没有积分,请加群...
浏览器中的实时模式编码 这是什么? 排列基本上是一个在线复制,其中一些库的功能直接可用,目的是提供一种在浏览器中进行实时编码试验的方法。 以下库中的函数可直接在排列的编辑器/repl 事物中使用: 此外,排列...
获得当前程序的路径、获得ini文件内容、设置ini文件内容、获得ini的节点名称、校验文件/路径是否存在、创建路径、获得/写入文件内容/遍历文件夹、...源码、根据数组规则抓取网页内容、浏览器编码转换、剪切板操作等等...
并且这个格式居然不能再这个函数里面设置,导致这个结果不可控制,在不同浏览器环境下面结果不同,不能得到自己想要的格式编码。在搜索引擎里面找了很长时间,都没有找到解决这个问题的办法,没办法,只能自己手动...
bootstrap中文文档,实际上是将bootstrap整个站扒下来了,使用浏览器打开index.htm即可,注意编码格式为UTF-8,如果出现乱码考虑修改浏览器编码。 主要便于离线环境下前端开发使用。 Bootstrap 是最受欢迎的 HTML...
libqglviewer是基于Qt的一个简化的OpenGL三维观众创作的C++库。 它提供了一些典型的3D查看器功能,如使用鼠标移动摄像机的可能性,而在...libqglviewer不显示各种格式的3D场景,但它可以为这样一个浏览器编码的基础。
用DJnative-swt和swt包开发的调用本地浏览器和webkit浏览器的示例
多浏览器下载中文名字附件编码
因为浏览器的收藏夹的html文件的编码方式 不同,Firefox使用的是UTF-8编码,而IE是ANSI编码. 用记事本打开这个HTM文件。选择“另存为”,“编码”选择项改为ANSI,保存。重现打开应该不会乱码了。反之亦然~。 4....
新版谷歌chrome浏览器 Charset+0.1.crx 修改编码插件 安装即用
Google Chrome编码插件,更改浏览器编码,在Mac OS下谷歌浏览器容易出现中文乱码,这个插件是更高浏览器编码的,多种编码可选。
B)浏览器编码 在向服务器端提交请求时,浏览器需要将大量的数据一同提交给 Server 端, 而提交前,浏览器需要按照 Server 端可以识别的方式进行编码,对于普通的表单数据,这种编码方式很简单,编码后的结果通常...
chrome77浏览器使用之前的包,新上传一个, 插件安装的方式自行搜索。 老版本请移步 https://download.csdn.net/download/king_flag/9782346 如果没有积分,请加群获取,群号:835870546
浏览器插件,可以帮助你更好的使用浏览器的所有功能
解决不同浏览器下载时中文名乱码问题,针对,不同的浏览器,采用不同的编码
非常好用的控件。完全可以扩展编写自己的浏览器空间。 多种强大浏览器功能,简单编码即可实现。