2009-02-25 5 views
3

Nous avons un fichier .js externe que nous voulons inclure dans un certain nombre de pages différentes. Le fichier contient du code pour trier une table du côté client et utilise les caractères ▲ et ▼ du script pour indiquer quelle colonne est triée et dans quelle direction.Question d'encodage Javascript

Le script a été écrit à l'origine pour une page ASP.Net afin de décharger un travail de tri du serveur vers le client (empêcher le tri des postbacks lorsque javascript est activé). Dans ce cas, l'encodage est à peu près toujours UTF-8 et ça marche très bien dans ce contexte.

Cependant, nous avons également un certain nombre de pages ASP Classic plus anciennes dans lesquelles nous voulons inclure le script. Pour ces pages l'encodage est plus d'un méli-mélo en fonction de qui a écrit la page quand et quel outil ils utilisaient (notepad, vs6, vs2005, autre helper html). Souvent, aucun encodage n'est spécifié dans la page, donc c'est au navigateur de choisir, mais il n'y a vraiment aucune règle stricte pour cela que je puisse voir.

Le problème est que si un codage différent (non-UTF8) est utilisé, les caractères ▼ et ▲ ne s'afficheront pas correctement. J'ai essayé d'utiliser des entités html à la place, mais je n'ai pas réussi à les faire fonctionner correctement avec le javascript.

Comment puis-je faire en sorte que le script s'ajuste aux divers encodages potentiels afin que les caractères "spéciaux" apparaissent toujours correctement? Y a-t-il différents caractères que je pourrais utiliser, ou un truc que j'ai manqué pour que les entités html fonctionnent à partir de javascript?

Voici l'extrait où les caractères sont utilisés:

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

Pour les curieux, les points de code que je fini par utiliser la réponse acceptée étaient \ u25B4 et \ u25BC.

Répondre

6

Vous souhaitez que Javascript s'échappe Unicode, c'est-à-dire "\ uxxxx", où "xxxx" est le point de code Unicode du caractère. Je crois que "\ u25B2" et "\ u25BC" sont les deux dont vous avez besoin.

+0

Merci, c'est ce que j'ai fait. Pour les curieux, les codes en question où \ u25B4 et \ u25BC –

7

L'encodage du fichier JavaScript dépend du codage de la page HTML, où elle est intégrée. Si vous avez un fichier JavaScript UTF-8 et une page HTML ISO-8859-1, le JavaScript est interprété comme ISO-8859-1.

Si vous chargez le JavaScript à partir comme un fichier externe, vous pouvez spécifier l'encodage du JavaScript:

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

Quoi qu'il en soit la meilleure option est d'enregistrer tous les fichiers liés à un projet Web dans un codage UTF-8 conseillé.

1

J'ai voté pour les deux. Je pense que les deux réponses seraient votre meilleur pari.

Vous allez probablement devoir écrire le script deux fois, en mettant une partie pour UTF-8, et en mettant une partie pour non UTF-8. C'est plus de problèmes, et peut ne pas fonctionner tout le temps, ENCORE.

Quelqu'un doit trouver des normes pour vos développeurs. Si vous écrivez tous avec au moins le même encodage, cela rendra les choses beaucoup plus faciles pour vous dans le futur.

+0

Vous n'avez pas besoin de deux scripts différents. L'approche d'échappement Unicode Javascript fonctionne que la page dans laquelle le Javascript est chargé soit ou non UTF-8. Je n'étais pas sûr à 100% que c'était le cas, donc j'ai testé en FF3 et IE7 avant de poster ma réponse. – andynormancx

+0

Mais je serais d'accord que la fixation des pages de sorte qu'ils sont tous UTF-8 est une meilleure solution à long terme. – andynormancx