對utf-8和gb2312格式 url進行解碼
新的系統編碼格式是:utf-8
老的頁面編碼格式是: gb2312
新的系統的url引數(帶中文) 提交到老的系統中,中文引數是亂碼。
解決思路1,在新的系統中傳遞的時候使用js進行解碼,然後再編碼。這種方案,和瀏覽器本身傳參無區別。所以,在使用這種方案後,在老的系統中解碼,依然解決不了問題。
簡單寫一下實現的偽**
傳參的時候,使用js 編碼:
location.href="old.aspx?word="+encodeuri('中文')
老的頁面解碼:
server.urldecode(request["word"]);
最終還是亂碼。
最終看了一下編過的漢字:「中文」
utf-8下:
js編碼過的如下: %e4%b8%ad%e5%9b%bd
瀏覽器form提交的如下:%e4%b8%ad%e5%9b%bd
gb2312:
js編碼格式如下: %e4%b8%ad%e5%9b%bd
瀏覽器form提交的如下:%d6%d0%b9%fa
說明,使用js編碼模式都是將字串用utf-8模式下編碼。
如果這樣子的話,那我使用js編碼傳參,後台都採用utf-8進行解碼就可以了。(這種思路未測試,我自己使用的是思路2)
httputility.urldecode(strencode, encoding.utf8); //判斷編碼格式 utf-8
解決思路2,
既然是解碼的問題,那我就要針對傳過來的的字串進行判斷,然後進行相應的格式進行解碼。
(1).判斷其編碼格式。
(2).再解碼。
**如下:
//string strencode =request["word"]; //解碼的時候這樣子獲取引數是有問題的,這樣獲取引數,無論怎麼轉都是亂碼。應用下面的這種方式
string strencode =getword( request.servervariables["query_string"]);
if (isutf8(strencode)) result = httputility.urldecode(strencode, encoding.utf8); //判斷編碼格式 utf-8
else result = httputility.urldecode(strencode, encoding.getencoding("gb2312")); 判斷編碼格式 gb2312
/// /// 獲取word引數
///
///
///
private string getword(string value)
}return strencode;
}/// /// 獲取字元的位元組
///
///
///
private static byte geturlcodingtobytes(string url)
url = url.substring(i + 3);
i = url.indexof('%');
}string urlcoding = sb.tostring();
if (string.isnullorempty(urlcoding))
return new byte[0];
urlcoding = urlcoding.replace("%", string.empty);
int len = urlcoding.length / 2;
byte result = new byte[len];
len *= 2;
for (int index = 0; index < len; index++)
return result;
}/// /// 判斷字元是否為utf-8
///
///
///
private static bool isutf8(string url)
while ((buf[i] & 0x80) != 0);
coctets--;
if (coctets == 0)
return false;}}
else
}if (coctets > 0)
return false;
if (ballascii)
return false;
return true;
}
2012-8-3 16:20
今天,遇到乙個問題,mvc專案中,乙個ajax請求的問題,又是亂碼。肯定又是編碼的東西,搞的人難受。其實很簡答,乙個文字框,輸入乙個值。ajax請求一下,看是否存在,如果存在就清空。看前任寫的**,
function checkunitname(unitname) , function (data)
});}
}
public static string unescape(string str)
}catch (formatexception ex)
}#endregion
return outstr;
}
這個方法基本沒派上用場,執行過後,返回為 空字串。
其實就這一句話就搞定了。
public static string unescape(string str)
問題點是:
ajax亂碼問題
從網上查資料得知,
1、xtmlhttp 返回的資料預設的字元編碼是utf-8,
2、post方法提交資料預設的字元編碼是utf-8, (get也是的,自己就是使用get方式)
因為我這個專案是使用gb2312的編碼格式,ajax(utf-8)
的模式傳到後台,就會出現亂碼了。明白了其中的道理,問題就好解決了。
gb2312和UTF 8的區別
gb2312編碼大約包含6000多漢字 不包括特殊字元 編碼範圍為第一位b0 f7,第二位編碼範圍為a1 fe 第一位為cf時,第二位為a1 d3 計算一下漢字個數為6762個漢字。當然還有其他的字元。包括控制鍵和其他字元大約7573個字元編碼 gbk編碼是對gb2312編碼的擴充,容納的漢字更多,...
GB2312 和 UTF 8的區別
本文 gb2312編碼大約包含6000多漢字 不包括特殊字元 編碼範圍為第一位b0 f7,第二位編碼範圍為a1 fe 第一位為cf時,第二位為a1 d3 計算一下漢字個數為6762個漢字。當然還有其他的字元。包括控制鍵和其他字元大約7573個字元編碼 gbk編碼是對gb2312編碼的擴充,容納的漢字...
GB2312和utf8編碼轉換
經常的寫中文出現亂碼,用編碼器翻譯在粘上去,有的還翻譯不過去。還是用翻譯函式吧 gb2312轉換成utf 8 utf iconv gb2312 utf 8 request keyword 將字串utf 8碼轉換為gb2312碼 str iconv utf 8 gb2312 translit str ...