您好,匿名用户
随意问技术百科期待您的加入

浏览器的Chart set(UTF8,GBK等)设置对Javascript无效?

0 投票
现象
  1. 打开weibo.com
  2. 登录,跳转到首页
  3. 通过浏览器菜单更改编码,观察到:
  4. 当编码设置为UTF8时,整个页面正常;(测试环境:Chrome,Safari)
  5. 当编码设置为GBK / Big5 / Shfit JIS(一种日文编码),除title(浏览器Tab里显示的)和页面底部的文本乱码外,页头及页面主体都正常显示(测试环境:Chrome,Safari)
  6. 当编码设置为ISO 2022-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输出中文的编码展示,故,js output里的中文显示跟浏览器的Charset设置无关

求助

1. 上面只是我的猜测,我分别用browser javascript charset render在google上搜索了半天,没找到官方权威的说法来证实我的猜测,求前端专家指点迷津,给个权威的链接。
2. 切换成韩文为什么js也不正常了呢?是韩文编码环境下,script标签里的js语法解析出错了吗?

用户头像 提问 2014年 2月15日 @ Syndra 上等兵 (331 威望)
分享到:

1个回答

0 投票

打开 Safari 的 Web检查器,切换到 问题 标签。然后修改浏览器的编码设置,会观察到当切换为韩文的时候,加载 .js 会有很多出错信息。而 GBK / Big5 / Shift JIS 不会。因此估计是 ISO 2022-KR 编码“入侵”了 ASCII 的前 127 个字符造成。

Google 了一下,发现韩文编码典型的一个做法是将反斜杠“\”转换为韩元字符“₩”。因此,加载一个充斥着反斜杠的 .js 自然就会出错了。

更新

前面说的不完全正确,因为 Shift JIS 也占用了 \BIG5 也使用了正常 ASCII 字符的编码。进一步观察 Web检查器,发现当编码设置为 GBK / Big5 / Shift JIS,实际加载的 .js 还是 UTF-8 的,而换成 ISO 2022-KR 则不然。这应该是浏览器具体实现的问题。

用户头像 回复 2014年 2月15日 @ Tryndamere 上等兵 (325 威望)
提一个问题:

相关问题

0 投票
1 回复 50 阅读
用户头像 提问 2012年 12月1日 @ Sion 上等兵 (319 威望)
0 投票
1 回复 36 阅读
0 投票
1 回复 55 阅读
0 投票
1 回复 78 阅读
用户头像 提问 2012年 12月1日 @ Nero 上等兵 (377 威望)
0 投票
1 回复 31 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...