1.
架設一個簡單Web Server,以GET方式傳值發現傳入中文字收到的東西變得很不正常
原因是以GET傳值會進行ENCodeURI,如:
架設一個簡單Web Server,以GET方式傳值發現傳入中文字收到的東西變得很不正常
原因是以GET傳值會進行ENCodeURI,如:
http://192.168.137.177/?test=送出
ENCodeURI:
http://192.168.137.177/?test=%E9%80%81%E5%87%BA
2.
而unicode utf-8是一種針對Unicode的可變長度字元編碼
在中文文字使用3byte表示
以”送”的16進位表示為” E9 80 81”
以”出”的16進位表示為” E5 87 BA”
URL編碼會把一個字元以16進制表示轉成兩個字元,然後在其前面放置轉義字元("%"),編碼完後”送”為” %E9%80%81”、"出”為%E5%87%BA。
3.
把’%’去除並把兩個ASCII字元為一組如”E9”,轉換成一個以16進位表示E9一個字元。
ASCII的’A’為65,16進位A為10,ASCII的’0’為48,16進位0為0,
當讀到大寫英文字母進行數字計算以’A’為首減掉’A’的65加10,讀到數字以’0’為首減掉’0’的48即可轉換成16進位表示。
因為兩個字元為一組把先讀到的字元轉成16進位做左移4BIT即乘於16,與下一個字元轉成16進位相加,組合出一個byte存入字串內。
String newstring; for(int i=0;i<outputString.length();i++) { if(outputString[i]=='%') { int temp; char tempchar=0; int test=16; for(int j=1;j<3;j++) { if(outputString[i+j]>='A') { temp=(int)(outputString[i+j]-'A'+10); } else { temp=(int)(outputString[i+j]-'0'); } tempchar+=(char)(temp*test); test=test/16; } newstring+=tempchar; i=i+2; } else { newstring+=outputString[i]; } }
留言
張貼留言