现象打开weibo.com登录,跳转到首页通过浏览器菜单更改编码,观察到:当编码设置为UTF8时,整个页面正常;(测试环境:Chrome,Safari)当编码设置为GBK/Big5/ShfitJIS(一种日文编码),除title(浏览器Tab里显示的)和页面底部的文本乱码外,页头及页面主体都正常显示(测试环境:Chrome,Safari)当编码设置为ISO2022-KR(一种韩文编码)时,title和页面底部的文本乱码,页头及页面主体空白(测试环境:Safari)无论浏览器编码怎么改变,服务端返回的内容都是UTF-8编码猜测上述会乱码的title和页面底部都是以UTF8中文写在HTML源码中的,HTML源码由浏览器渲染,故浏览器编码设置不是UTF8时就会乱码。而页头、页面主体的内容是以utf8串(如\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\u7535\u5b50\u94f6\u884c)的形式写在script标签中,或者从服务端ajax请求得到的浏览器只负责Javascript语法解析及执行,不负责JS输出中文的编码展示,故,jsoutput里的中文显示跟浏览器的Charset设置无关求助1.上面只是我的猜测,我分别用browserjavascriptcharsetrender在google上搜索了半天,没找到官方权威的说法来证实我的猜测,求前端专家指点迷津,给个权威的链接。2.切换成韩文为什么js也不正常了呢?是韩文编码环境下,script标签里的js语法解析出错了吗?
2 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
打开Safari的Web检查器,切换到问题标签。然后修改浏览器的编码设置,会观察到当切换为韩文的时候,加载.js会有很多出错信息。而GBK/Big5/ShiftJIS不会。因此估计是ISO2022-KR编码“入侵”了ASCII的前127个字符造成。Google了一下,发现韩文编码典型的一个做法是将反斜杠“\”转换为韩元字符“₩”。因此,加载一个充斥着反斜杠的.js自然就会出错了。更新前面说的不完全正确,因为ShiftJIS也占用了\,BIG5也使用了正常ASCII字符的编码。进一步观察Web检查器,发现当编码设置为GBK/Big5/ShiftJIS,实际加载的.js还是UTF-8的,而换成ISO2022-KR则不然。这应该是浏览器具体实现的问题。
添加回答
举报
0/150
提交
取消