Dans le projet d'aujourd'hui, nous avons rencontré une situation dans laquelle nous devions utiliser l'échappement de JavaScript pour encoder les caractères chinois, puis utiliser une évasion pour les décoder. Lors du test du segment de code, des caractères tronqués sont apparus.
La situation spécifique est la suivante :
Tout d'abord, utilisez EditPlus pour ouvrir la page de test test.html et modifiez le code html suivant :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>unescape测试</title> </head> <body> <script> var teststr=escape("脚本之家"); document.write(teststr); </script> </body> </html>
Impression des pages :
%uFFFD%u0171%uFFFD%u05AE%uFFFD%uFFFD
Vous pouvez voir que quelque chose ne va pas à ce stade. Rien qu'au nombre de caractères correspondant aux caractères chinois, c'est déjà faux !
Utilisez ensuite le code suivant pour tester les caractères chinois décodés par unescape :
var relstr=unescape("%uFFFD%u0171%uFFFD%u05AE%uFFFD%uFFFD"); document.write(relstr);
Des caractères tronqués sont apparus : �ű�֮��
Solution :
Ouvrez le fichier test.html avec Dreamweaver et découvrez le problème !
Le paragraphe original
var teststr=escape("脚本之家");
est devenu
var teststr=escape("ű֮");
On voit que cela est dû à l'encodage initial de l'éditeur !
Modifiez à nouveau les caractères chinois dans Dreamweaver, réexécutez test.html et obtenez l'encodage correspondant :
%u811A%u672C%u4E4B%u5BB6
À ce stade, utilisez unescape pour décoder :
var relstr=unescape("%u811A%u672C%u4E4B%u5BB6"); document.write(relstr);
Nous avons obtenu le caractère chinois original correct : Script House !