代码之家  ›  专栏  ›  技术社区  ›  Joel Coehoorn

javascript编码问题

  •  3
  • Joel Coehoorn  · 技术社区  · 15 年前

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

    该脚本最初是为ASP.NET页编写的,用于将一些排序工作从服务器卸载到客户端(启用javascript时防止对回发进行排序)。在这种情况下,编码通常都是UTF-8,在这种情况下工作得很好。

    但是,我们也有一些旧的经典ASP页面,希望在其中包含脚本。对于这些页面,编码更像是一个大杂烩,这取决于谁在何时编写页面以及他们使用的工具(记事本、VS6、VS2005、其他HTML助手)。通常在页面中没有指定编码,所以这取决于浏览器的选择,但实际上我看不到硬规则。

    问题是,如果使用不同的(非UTF8)编码,则_-¼和_-²字符将无法正确显示。我尝试使用HTML实体,但无法让它们在JavaScript中正常工作。

    如何调整脚本以适应各种可能的编码,使“特殊”字符始终正确显示?我是否可以使用不同的字符,或者我错过了一个让HTML实体从JavaScript工作的技巧?

    下面是使用字符的代码段:

    // 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;
    

    出于好奇,我最终使用的代码点是公认的答案是。

    3 回复  |  直到 15 年前
        1
  •  6
  •   andynormancx    15 年前

    您需要javascript Unicode转义,即\uxxxx,其中“xxxx”是字符的Unicode码位。我相信你需要的是“u25b2”和“u25bc”。

        2
  •  7
  •   TheHippo    15 年前

    javascript文件的编码取决于HTML页面的编码,HTML页面嵌入在哪里。如果您有一个utf-8javascript文件和一个iso-8859-1html页面,那么javascript将被解释为iso-8859-1。

    如果将javascript作为外部文件加载,则可以指定javascript的编码:

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

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

        3
  •  1
  •   EllaJo    15 年前

    我都投了票。我想这两个答案都是你最好的选择。

    您可能需要编写两次脚本,输入一部分用于UTF-8,输入一部分用于非UTF-8。更麻烦的是,可能不会一直工作。

    有人需要为您的开发人员制定标准。如果你们都用同样的编码来写作,这将使你们今后的工作变得更加容易。