Maison > interface Web > js tutoriel > le corps du texte

Méthode d'implémentation de l'utilisation de l'encodage et du décodage gb2312 sous js

高洛峰
Libérer: 2017-02-04 09:46:42
original
2139 Les gens l'ont consulté

Exigence
Encoder le chinois avec gb2312 en js. Par exemple, « I » doit être codé comme « �� ».

Analyse
Comme nous le savons tous, encodeURI et encodeURIComponent seront codés en utf-8, par exemple "I" est codé avec "I". D'après les expériences, il semble qu'il n'y ait aucun paramètre permettant de spécifier l'encodage quelque part. Trouvez simplement un autre moyen.
Une analyse approximative propose les solutions suivantes :
1. Utilisez js pour créer une iframe cachée et spécifiez-la comme encodage gb2312, placez le texte qui doit être converti dans une entrée du formulaire iframe et spécifiez le formulaire comme méthode get et soumettez-le,
puis récupérez son URL et analysez-le, vous devriez pouvoir obtenir son texte codé en gb2312.
2. Utilisez ajax pour l'envoyer au serveur pour encodage, puis renvoyez-le.
3. Créez une table d'encodage gb2312 en js.

Mise en œuvre
Personnellement, la première solution semble trop compliquée et doit être testée dans plusieurs navigateurs différents.
La deuxième option nécessite la coopération d'un serveur.
Voici l'implémentation de la troisième solution :
Au début, nous avions prévu d'utiliser un tableau pour stocker la table d'encodage. Plus tard, afin de réduire la taille du fichier js, nous sommes passés au stockage de chaînes.
Donc, le code js est le suivant :

Code

function encodeToGb2312(str){ 
var strOut=""; 
for(var i = 0; i < str.length; i++){ 
var c = str.charAt(i); 
var code = str.charCodeAt(i); 
if(c==" ") strOut +="+"; 
else if(code >= 19968 && code <= 40869){ 
index = code - 19968; 
strOut += "%" + z.substr(index*4,2) + "%" + z.substr(index*4+2,2); 
} 
else{ 
strOut += "%" + str.charCodeAt(i).toString(16); 
} 
} 
return strOut; 
} 
function decodeFromGb2312(str){ 
var strOut = &#39;&#39;; 
for (var i=0;i<str.length; i++){ 
var c = str.charAt(i); 
// +是空格 
if (c == &#39;+&#39;){ 
strOut += &#39; &#39;; 
} 
// a,b,c,1,2等,非%开头的,直接返回本身 
else if (c != &#39;%&#39;){ 
strOut += c; 
} 
// %开头 
else{ 
i++; 
var nextC = str.charAt(i); 
// 数字,则不是汉字 
if (!isNaN(parseInt(nextC))){ 
i++; 
strOut += decodeURIComponent(c+nextC+str.charAt(i)); 
} 
else{ 
var x = new String(); 
try 
{ 
var code = str.substr(i,2)+str.substr(i+3,2); 
i = i + 4; 
var index = -1; 
while ((index = z.indexOf(code,index+1)) != -1){ 
if (index%4 == 0){ 
strOut += String.fromCharCode(index/4+19968); 
break; 
} 
} 
}catch(e){} 
} 
} 
} 
return strOut; 
} 
var z=&#39;{0}&#39;;
Copier après la connexion

(La ponctuation chinoise n'est pas prise en compte ici. La raison principale est que la ponctuation chinoise et la ponctuation japonaise et coréenne sont mélangées ensemble en Unicode, et ils sont distribués à plusieurs endroits. J'ai la flemme de le faire. Si quelqu'un l'a, pouvez-vous m'en envoyer une copie ?)
Enfin, utilisez .NET pour générer le code en z :

Pour plus d'articles liés à la méthode d'implémentation d'utilisation de l'encodage et du décodage gb2312 sous js, veuillez faire attention au site Web PHP chinois !
StringBuilder sb = new StringBuilder(); 
string strFormat = @"...z = &#39;"; // 前面的js代码 
const int MinHanzi = 19968; 
const int MaxHanzi = 40869; 
for (int i = MinHanzi; i < MaxHanzi + 1; i++) 
{ 
byte[] bytes = Encoding.GetEncoding("gb2312").GetBytes(((char)i).ToString()); 
sb.AppendFormat("{0}{1}", Convert.ToString(bytes[0], 16).ToUpper(), Convert.ToString(bytes[1], 16).ToUpper()); 
} 
string str = strFormat + sb.ToString(0, sb.Length - 1) + "&#39;;"; 
System.IO.File.WriteAllText(@"F:\encodeGb2312.js", str, Encoding.ASCII);
Copier après la connexion
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal