使用外部JS文件中的jQuery填充下拉列表时的JavaScript字符问题

时间:2009-11-09 12:15:24

标签: javascript jquery iphone encoding safari

当我从外部js文件使用jQuery加载下拉列表时,我遇到了字符编码问题。只有在JavaScript对象不在页面内时才会发生这种情况。

例如,下面是JavaScript对象。

var langs = [
  {value:'zh-CN', text:'中文 (简体) Chinese Simplified'},
  {value:'en', text:'English'},
  {value:'eo', text:'EsperAnt'},
  {value:'es', text:'Español'},
  {value:'ja', text:'日本語 (Japanese)'},
  {value:'pt-PT', text:'Português'},
  {value:'ru', text:'Русский (Russian)'},
 ];

如果我的页面中包含正确的元标记<meta http-equiv="content-type" content="text/html; charset=utf-8" />,则以下代码可以使用。

$(document).ready(function() {
                // Fill language select
                $.each(langs, function(i, j){  
     $('#LangSelect').append($("<option></option>").attr("value",j.value).text(j.text));
                });

但是,因为我需要多于一页的语言,所以我将langs对象移动到外部js文件并引用它。在这样做之后,我遇到了诸如俄语字符之类的编码问题变成了ÐÑÑÑÑкий(俄语)。

即使对外部js文件的引用设置如下,这种编码问题似乎仍然会出现:

<script type="text/javascript" charset="UTF-8" src="externalJS.js"></script>

是否有强制JavaScript对象从外部文件加载适当的编码?

请注意我在iPhone Mobile Safari浏览器上查看内容时遇到这些问题。此外,这些页面只是html和JavaScript,没有任何服务器端组件。

提前致谢, 本

2 个答案:

答案 0 :(得分:0)

确保使用UTF-8编码保存javascript文件。如果您在Notepad ++中打开文件,则可以单击格式&gt;以UTF-8编码(如果您尝试格式&gt;转换为UTF-8,然后使用十六进制编辑器查看页面。有时您最终会遇到一些奇怪的问题文件开头的字符。)

答案 1 :(得分:0)

  

是否有强制JavaScript对象从外部文件加载适当的编码?

是的,您引用的script charset属性。然而,它在历史上并不适用于所有地方,最好不要依赖它。如果不支持,浏览器将始终使用主页的charset作为脚本中的charset。因此,只要在主页面中包含UTF-8字符集参数,您就可以了。

如果像Mobile Safari这样的现代浏览器不理解它,我会很惊讶。

您的服务器是否可能正在使用包含错误字符集的错误Content-Type标头提供.js文件? JS中的unset mime-types和Apache中的AddDefaultCharset的组合可能会让你:

Content-Type: text/plain;charset=iso-8859-1

这可能会产生混淆效果。