最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js下用gb2312編碼解碼實(shí)現(xiàn)方法

 更新時(shí)間:2009年12月31日 23:26:15   作者:  
在js中將中文用gb2312編碼。如,“我”編碼后應(yīng)該是“%CE%D2”。
需求
在js中將中文用gb2312編碼。如,“我”編碼后應(yīng)該是“%CE%D2”。

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

實(shí)現(xiàn)
第一種方案?jìng)€(gè)人感覺太折騰,需要在多個(gè)不同的瀏覽器下測(cè)試。
第二種方案需要有服務(wù)器配合。
下面是第三種方案的實(shí)現(xiàn):
最開始打算使用數(shù)組存儲(chǔ)編碼表,后來為了減小js文件大小,改用string來存儲(chǔ)。
于是,js代碼如下:

代碼
復(fù)制代碼 代碼如下:

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);
// 數(shù)字,則不是漢字
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}';

(這里沒考慮中文標(biāo)點(diǎn),主要是看unicode里中文標(biāo)點(diǎn)和日韓的標(biāo)點(diǎn)混在一起,分布在幾個(gè)地方,就懶得弄了。誰弄了可以發(fā)我一份,謝了。)
最后用.NET生成z處的代碼:

代碼
復(fù)制代碼 代碼如下:

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);

相關(guān)文章

  • 基于JavaScript實(shí)現(xiàn)右鍵菜單和拖拽功能

    基于JavaScript實(shí)現(xiàn)右鍵菜單和拖拽功能

    本文給大家分享基于js實(shí)現(xiàn)的右鍵菜單功能和拖拽功能的代碼解析,非常不錯(cuò),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • javascript檢測(cè)移動(dòng)設(shè)備橫豎屏

    javascript檢測(cè)移動(dòng)設(shè)備橫豎屏

    移動(dòng)端的開發(fā)過程中,免不了要判斷橫豎屏,然后在執(zhí)行其他操作,比如分別加載不同樣式,橫屏顯示某些內(nèi)容,豎屏顯示其他內(nèi)容等等。
    2016-05-05
  • 基于JS實(shí)現(xiàn)步驟引導(dǎo)進(jìn)度條效果的代碼示例

    基于JS實(shí)現(xiàn)步驟引導(dǎo)進(jìn)度條效果的代碼示例

    在Web前端開發(fā)中,步驟引導(dǎo)進(jìn)度條是一種常見的交互設(shè)計(jì),用于引導(dǎo)用戶完成多步驟任務(wù),如表單填寫、注冊(cè)流程或支付操作,本文將詳細(xì)介紹如何利用JavaScript實(shí)現(xiàn)一個(gè)功能完善且視覺友好的步驟引導(dǎo)進(jìn)度條效果,需要的朋友可以參考下
    2025-02-02
  • js實(shí)現(xiàn)漂亮的星空背景

    js實(shí)現(xiàn)漂亮的星空背景

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)漂亮的星空背景,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 用js做一個(gè)小游戲平臺(tái) (一)

    用js做一個(gè)小游戲平臺(tái) (一)

    大體的意思就是想寫一些js,使得網(wǎng)頁上能玩多個(gè)游戲。譬如:貪吃蛇、俄羅斯方塊、推箱子、坦克等等。
    2009-12-12
  • javascript事件冒泡,事件捕獲和事件委托詳解

    javascript事件冒泡,事件捕獲和事件委托詳解

    這篇文章主要介紹了javaScript 事件冒泡,事件捕獲和事件委托的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • JavaScript實(shí)現(xiàn)帶箭頭標(biāo)識(shí)的多級(jí)下拉菜單效果

    JavaScript實(shí)現(xiàn)帶箭頭標(biāo)識(shí)的多級(jí)下拉菜單效果

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)帶箭頭標(biāo)識(shí)的多級(jí)下拉菜單效果,可實(shí)現(xiàn)橫向與縱向箭頭的形式標(biāo)識(shí)選中菜單項(xiàng)位置的功能,涉及javascript針對(duì)頁面元素位置的判定與樣式動(dòng)態(tài)操作技巧,需要的朋友可以參考下
    2015-08-08
  • Bootstrap table右鍵功能實(shí)現(xiàn)方法

    Bootstrap table右鍵功能實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Bootstrap table右鍵功能的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 將rmb數(shù)字位錢數(shù)轉(zhuǎn)化為中文錢數(shù)的js函數(shù)

    將rmb數(shù)字位錢數(shù)轉(zhuǎn)化為中文錢數(shù)的js函數(shù)

    用力將用戶輸入的錢數(shù),中文化輸出的函數(shù)代碼,需要的朋友可以參考下。
    2010-07-07
  • ECharts儀表盤實(shí)例代碼(附源碼下載)

    ECharts儀表盤實(shí)例代碼(附源碼下載)

    大家在汽車駕駛艙里一眼就可以看到儀表盤,使用使用Echarts制作的儀表盤可以輕松展示用戶的數(shù)據(jù),清晰的看出某個(gè)指標(biāo)值所在的范圍,儀表盤形式的報(bào)表應(yīng)用在各種統(tǒng)計(jì)系統(tǒng)中,本文結(jié)合實(shí)例講解儀表盤在銷售任務(wù)完成率的統(tǒng)計(jì)應(yīng)用
    2016-02-02

最新評(píng)論

桃园县| 洪湖市| 乐清市| 奈曼旗| 浦江县| 西吉县| 会理县| 蚌埠市| 西畴县| 尼玛县| 商南县| 台江县| 萝北县| 新丰县| 阿克陶县| 尚志市| 深泽县| 望城县| 根河市| 沂水县| 革吉县| 绥芬河市| 姚安县| 贵溪市| 威信县| 陵水| 永胜县| 鄂温| 女性| 富平县| 夹江县| 富源县| 乌鲁木齐市| 时尚| 台江县| 绍兴县| 桂东县| 白山市| 武定县| 莲花县| 汉中市|