当我从外部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,没有任何服务器端组件。
提前致谢, 本
答案 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
这可能会产生混淆效果。