Mira primero el código reproducido
1, GB2312.html El archivo está codificado como GB2312
La copia del código es la siguiente:
<! Doctype html>
<html>
<Evista>
<title> </title>
<meta charset = "gb2312"/>
<estilo>
pag {
Color: rojo;
}
</style>
</ablo>
<Body>
<Button onClick = "Loadjs ('utf8.js', 'utf-8')"> Test </Button>
<script>
función loadjs (src, charset) {
var script = document.createElement ('script');
script.src = src;
script.charset = charset;
var head = document.getElementsByTagName ('Head') [0];
head.appendChild (script);
}
</script>
</body>
</html>
2. UTF8.JS La codificación del archivo es UTF-8
La copia del código es la siguiente:
var p = document.createElement ('P');
p.innerhtml = 'es decir, el caché causa código confuso';
document.body.appendChild (P);
La función LoadJS crea dinámicamente un script, establece SRC y la agrega a la cabeza después del charset. Aquí, cada clic del botón introducirá UTF8.js en la página. El código en UTF.JS creará un elemento P para establecer una pieza de texto y luego lo agregará al cuerpo.
Cuando haga clic en el botón por primera vez, el texto se mostrará normalmente.
Después de la segunda vez, la codificación del texto fue incorrecta.
Como se muestra
Si la etiqueta de script no es una etiqueta de script creada dinámicamente y se escribe directamente en la página HTML, no hay problema.
La copia del código es la siguiente:
<script type = "text/javaScript" src = "utf8.js" charset = "utf-8"> </script>
Si usa document.write para cargar recursos JS, el error no ocurrirá.
La copia del código es la siguiente:
<script>
function loadByWrite (URL, charset) {
var str = '<script type = "text/javaScript"' + 'src = "' + url + '" charset = "' + charset + '"> <' + '/script>';
document.write (str);
}
</script>
<script>
LoadByWrite ('UTF8.JS', 'UTF-8')
</script>
La solución es reemplazar la orden de asignación de los atributos SRC y Charset.
La copia del código es la siguiente:
script.charset = charset;
script.src = src;
Es decir, asigne primero un valor al charset.