网页前端分析:关于淘宝页面编码的疑惑

http://www.itjxue.com  2015-08-07 21:59  来源:未知  点击次数: 

因为即将开始淘宝的项目,在前端方面必然要深入了解taobao ued规范,规范还是比较全的,只是对taobao.com的编码和字符集的选择有很多困惑,由于历史原因,taobao的页面编码是ASCII编码,字符集采用gb2312,这并无不妥,麻烦的仅仅是做代码开发的时候要抽出精力去对付复杂多元的字符集,比如在taobao首页是ASCII,页面的meta中指定的字符集是GB18030,但在window下,用firefox另存页面到本地后,发现meta字段的字符集变为gb2312,而且在ie中打开淘宝首页,浏览器认为的字符集是gb2312,但gb18030本身范围比gb2312要大,所以万一有越界字符出现,浏览器也会使用gb18030的字符集解释页面。



在纯粹的html中,这种相同编码字符集不同所带来的隐患通常会被越来越强大的A级浏览器hack掉,所以只要采用大致兼容的gb字符集,页面大概不会有异常。但当一个ascII码的html去引用utf编码的css或者js文件的时候,则必须指定引用文件的编码。但让人困惑的是,在taobao首页中却存在引用非标注编码的utf文件,而且不是个例,比如taobao首页尾部的tbra-fp.js,就没有指定其编码,
<script type="text/javascript" 
src="http://assets.taobaocdn.com/tbra/1.0/tbra-fp.js?
t=20090619.js"
></script>

而这里的tbra-fp.js却是utf8的编码,还好这个文件中只有英文,而且没有ajax相关的代码,音位utf和ascII在英文范围是可以兼通的,这个文件还算比较正确的能和首页协同工作。而在首页最下方的几个沙箱引用的几个js文件则规范的标注了charset=gb2312,
<script type="text/javascript" 
src="http://cn2.adserver.yahoo.com/a?
f=2121060025&p=cntaobao&l=TBT1&c=r"
 charset="gb2312"></script>

且这几个沙箱引用的js也确实是ASCII编码的文件,因为js中含有中文字符,为了避免乱码则必须html编码保持一致。上述这种文件编码不统一的现象在首页还有几处存在,大概是bug吧。



我们说gb系列的字符集都是基于ASCII的扩展,只是各个字符集的扩展程度不一致,而且不同的字符集可能会有重叠的现象,毕竟每一种扩展都是各个国家或者地区单独行动,比如gb2312和big5为了能显示简体和繁体中文分别对ASCII作各自扩充,而这两种扩充得到的字符集是不兼容的。也就是说一个包含简体和繁体字的文件,不可能同时使用gb2312和big5来同时正确显示所有的汉字。而且gb2312的汉字个数本来就不多,所以采用gb2312来处理中文是有很多隐患的。如果遇到前端和后台的字符集不一致的情况,会很麻烦。在taobao首页的源码中就有很多这种情况:




而调试编码和字符集是需要不小的时间和精力的。如果正站统一采用unicode字符集的话,大概就不会出现各种各样编码不一造成的开发成本浪费和软件隐患了。嗨,这也是做全站架构的时候需要考虑的事情,做开发的话只需去遵循规范就好了,只是在开发的时候细心一点,保证文件编码和字符集保持一致即可,无他。

(责任编辑:IT教学网)

更多