Regardez d'abord le code reproduit
1, gb2312.html Le fichier est codé comme gb2312
La copie de code est la suivante:
<! Doctype html>
<html>
<adal>
<Title> </Title>
<meta charset = "gb2312" />
<style>
p {
Couleur: rouge;
}
</ style>
</ head>
<body>
<Button onClick = "Loadjs ('utf8.js', 'utf-8')"> Test </utton>
<cript>
Fonction Loadjs (Src, Charset) {
var script = document.createElement ('script');
script.src = src;
script.charset = charset;
var head = document.getElementsByTagName ('head') [0];
head.appendChild (script);
}
</cript>
</docy>
</html>
2. Utf8.js L'encodage du fichier est UTF-8
La copie de code est la suivante:
var p = document.CreateElement ('p');
p.innerhtml = 'ie cache provoque du code brouillé';
document.body.ApendChild (P);
La fonction LOADJS crée dynamiquement un script, définit SRC et l'ajoute à la tête après Charset. Ici, chaque clic sur le bouton introduira UTF8.js à la page. Le code dans UTF.js créera un élément P pour définir un morceau de texte, puis l'ajoutera au corps.
Lorsque vous cliquez sur le bouton pour la première fois, le texte s'affiche normalement.
Après la deuxième fois, le codage du texte était incorrect.
Comme indiqué
Si la balise de script n'est pas une balise de script créée dynamiquement et est écrite directement sur la page HTML, il n'y a pas de problème.
La copie de code est la suivante:
<script type = "text / javascript" src = "utf8.js" charset = "utf-8"> </ script>
Si vous utilisez Document.Write pour charger les ressources JS, le bogue n'aura pas lieu.
La copie de code est la suivante:
<cript>
fonction chargebywrite (url, charset) {
var str = '<script type = "text / javascript"' + 'src = "' + url + '" charset = "' + charset + '"> <' + '/ script>';
Document.Write (STR);
}
</cript>
<cript>
loadbywrite ('utf8.js', 'utf-8')
</cript>
La solution consiste à remplacer l'ordre d'attribution des attributs SRC et Charset.
La copie de code est la suivante:
script.charset = charset;
script.src = src;
C'est-à-dire attribuer une valeur au charset d'abord.