js_javascriptスキルでgb2312エンコード・デコードを利用する実装方法

WBOY
リリース: 2016-05-16 18:37:27
オリジナル
1702 人が閲覧しました
要件
中国語を js の gb2312 でエンコードします。たとえば、「I」は「��」としてエンコードする必要があります。

分析
ご存知のとおり、encodeURI と encodeURIComponent は utf-8 でエンコードされます。たとえば、「I」は「I」でエンコードされます。実験したところ、どこかにエンコーディングを指定するパラメータがないようです。別の方法を見つけてください。
大まかな分析には次の解決策があります。
1. js を使用して非表示の iframe を作成し、それを gb2312 エンコーディングとして指定し、変換する必要があるテキストをiframe の form で、フォームを get メソッドとして指定して送信し、
でその URL を取得して解析すると、gb2312 でエンコードされたテキストを取得できるはずです。
2. ajax を使用してサーバーに送信し、エンコードしてから送り返します。
3. js で gb2312 エンコーディング テーブルを作成します。

実装
最初の解決策は非常に面倒に感じられるため、複数の異なるブラウザでテストする必要があります。
2 番目のオプションではサーバーの連携が必要です。
以下は 3 番目の解決策の実装です。
最初は、エンコード テーブルを格納するために配列を使用する予定でしたが、その後、js ファイルのサイズを削減するために、文字列ストレージに切り替えました。
したがって、js コードは次のとおりです。

コード
コードをコピー コードは次のとおりです:

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 = コード - 19968;
strOut = "%" z.substr(index*4,2) "%" z.substr(index*4 2,2); >}
else {
strOut = "%" str.charCodeAt(i).toString(16);
}
}
return strOut
}
関数 decodeFromGb2312 (str){
var strOut = '';
for (var i=0;ivar c = str.charAt(i);はスペースです
if (c == ' '){
strOut = ' ';
}
// a、b、c、1、2 など、開始しない場合% を使用すると、自分自身を直接返します。
else if ( c != '%'){
strOut = c;
}
// % は
else{
i; で始まります。 🎜>var nextC = str.charAt(i);
// 漢字ではなく数字
if (!isNaN(parseInt(nextC))){
i ; 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;
while ((index = z.indexOf(code,index 1)) ){
if (index%4 == 0 ){
strOut = String.fromCharCode(index/4 19968)
break
}
}
}catch; ){}
}
}
}
return strOut;
}
var z='{0}';


(中国語の句読点はここでは考慮していません。主に Unicode の中国語の句読点と日本語と韓国語の句読点に基づいています。句読点が混在していて、いくつかの場所に分散しているため、私はそれらを行うのが面倒です。持っている人はコピーを送ってください、ありがとう。 )
最後に .NET を使用して z でコードを生成します。

コード




コードをコピーします
コードは次のとおりです: StringBuilder sb = new StringBuilder(); string strFormat = @"...z = '" // 前の js コードconst int MinHanzi = 19968;
const int MaxHanzi = 40869;
for (int i = MinHanzi; 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) "';"; WriteAllText(@" F:encodeGb2312.js", str, Encoding.ASCII);
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート