分析 大家知道,encodeURI和encodeURIComponent會用utf-8編碼,如“我”編碼后是“%E6%88%91”。據實驗,似乎沒有參數指定編碼的地方。只有另尋他法。 " /> 免费被黄网站在观看,毛片黄色视频,黄色一级在线

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

js下用gb2312編碼解碼實現方法

需求
在js中將中文用gb2312編碼。如,“我”編碼后應該是“%CE%D2”。

分析
大家知道,encodeURI和encodeURIComponent會用utf-8編碼,如“我”編碼后是“%E6%88%91”。據實驗,似乎沒有參數指定編碼的地方。只有另尋他法。
大致分析有如下幾種解決方案:
1. 用js創建一個隱藏的iframe并指定其為gb2312編碼,將需要轉換的文本放到iframe的form的一個input中,將form指定為get方式并提交,
然后獲取其url并解析,應該可以得到其gb2312編碼后的文本。
2. 用ajax傳到服務器上編碼,然后傳回來。
3. 在js中創建一個gb2312編碼表。

實現
第一種方案個人感覺太折騰,需要在多個不同的瀏覽器下測試。
第二種方案需要有服務器配合。
下面是第三種方案的實現:
最開始打算使用數組存儲編碼表,后來為了減小js文件大小,改用string來存儲
于是,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 = 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 = '';
for (var i=0;i<str.length; i++){
var 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++;
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='{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 < 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) + "';";
System.IO.File.WriteAllText(@"F:/encodeGb2312.js", str, Encoding.ASCII);

JavaScript技術js下用gb2312編碼解碼實現方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 69国产精品视频免费 | 91三级在线观看 | 美女视频黄的全免费视频网站 | 欧美黑人巨大xxxxx视频 | 97人人模人人揉人人捏 | 精品视频在线观看一区二区 | 亚洲日本一区二区三区在线不卡 | 成人黄视频在线观看 | 国产精品免费视频网站 | 4338×亚洲全国最大色成网站 | 免费观看色视频 | 亚洲国产乱码在线精品 | 久久久久亚洲精品影视 | 五月四房| 色婷婷亚洲综合 | 亚洲五月婷| 玖玖国产精品 | 伊人成人在线观看 | 黄免费在线观看 | 亚洲图片欧美激情 | 一本久道久久综合婷婷 | 怡红院在线视频精品观看 | 欧美午夜小视频 | 黄色免费网站在线观看 | 91茄子在线观看 | 亚洲综合色婷婷在线观看 | 亚洲欧美一级久久精品 | aⅴ一区二区三区无卡无码 aaaaaa精品视频在线观看 | 亚洲国产夜色在线观看 | 在线国产91 | haodiaocao这里只有精品一 | 国产精品欧美亚洲韩国日本不卡 | 在线看的成人性视频 | 久久久xxxx | 国产一区二区精品久久凹凸 | 男人操女人免费视频 | 久久这里只有精品免费看青草 | 亚洲欧美在线综合一区二区三区 | 久久综合亚洲鲁鲁五月天欧美 | 四虎在线最新地址4hu | 青青伊人91久久福利精品 |