【问题标题】:Javascript encoding questionJavascript编码问题
【发布时间】:2010-10-09 20:13:21
【问题描述】:

我们有一个外部 .js 文件,我们希望将其包含在许多不同的页面中。该文件包含在客户端对表格进行排序的代码,并使用脚本中的 ▲ 和 ▼ 字符来指示排序的列和方向。

该脚本最初是为 ASP.Net 页面编写的,用于将一些排序工作从服务器卸载到客户端(在启用 javascript 时防止排序回发)。在这种情况下,编码几乎总是 UTF-8,并且在这种情况下效果很好。

但是,我们也有一些旧的 Classic ASP 页面,我们希望在其中包含该脚本。对于这些页面,编码更像是一个大杂烩,这取决于谁在何时编写页面以及他们使用什么工具(记事本、vs6、vs2005、其他 html 助手)。页面中通常没有指定编码,因此由浏览器来选择,但我可以看到它并没有硬性规定。

问题在于,如果使用不同的(非 UTF8)编码,▼ 和 ▲ 字符将无法正确显示。我尝试改用 html 实体,但无法让它们在 javascript 中正常工作。

如何使脚本针对各种可能的编码进行调整,以便始终正确显示“特殊”字符?是否有我可以使用的不同字符,或者我错过了使 html 实体在 javascript 中工作的技巧?

这里是使用字符的sn-p:

// get sort direction, arrow
var dir = 1;
if (self.innerHTML.indexOf(" ▲") > -1)           
     dir = -1;
var arrow = (dir == 1)?" ▲":" ▼"; 

// SORT   -- function that actually sorts- not relevant to the question
if  (!SimpleTableSort(t.id, self.cellIndex, dir, sortType)) return;

//remove all arrows
for (var c = 0,cl=t.rows[0].cells.length;c<cl;c+=1)
{
    var cell = t.rows[0].cells[c];
    cell.innerHTML = cell.innerHTML.replace(" ▲", "").replace(" ▼", "");
}

// set new arrow
self.innerHTML += arrow;

出于好奇,我最终使用的代码点是 \u25B4 和 \u25BC。

【问题讨论】:

    标签: javascript html encoding


    【解决方案1】:

    JavaScript 文件的编码取决于嵌入它的 HTML 页面的编码。如果您有一个 UTF-8 JavaScript 文件和一个 ISO-8859-1 HTML 页面,则 JavaScript 被解释为 ISO-8859-1。

    如果您从外部文件加载 JavaScript,您可以指定 JavaScript 的编码:

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

    无论如何,最好的选择是以一种编码保存与 web 项目相关的所有文件,推荐使用 UTF-8。

    【讨论】:

      【解决方案2】:

      您需要 Javascript Unicode 转义,即“\uxxxx”,其中“xxxx”是字符的 Unicode 代码点。我相信“\u25B2”和“\u25BC”是你需要的两个。

      【讨论】:

      • 谢谢,成功了。对于好奇,有问题的代码在哪里 \u25B4 和 \u25BC
      【解决方案3】:

      我对两者都投了赞成票。我认为这两个答案放在一起将是您最好的选择。

      您可能需要编写两次脚本,其中一部分用于 UTF-8,另一部分用于非 UTF-8。这更麻烦,而且可能不会一直有效,仍然。

      需要有人为您的开发人员制定标准。如果你们都使用至少相同的编码进行编写,那么以后你们自己的工作会容易得多。

      【讨论】:

      • 您不需要两个不同的脚本。无论加载 Javascript 的页面是否为 UTF-8,Javascript Unicode 转义方法都有效。我不是 100% 确定是这种情况,所以我在发布答案之前在 FF3 和 IE7 中进行了测试。
      • 但我同意将页面修复为 UTF-8 是一个更好的长期解决方案。
      猜你喜欢
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2012-07-06
      • 2017-07-16
      • 2019-08-12
      相关资源
      最近更新 更多