程式者的胡言亂語
Win32上做UTF-8的URL編碼
今天需要用到一段code,遍尋而不可得,所以動手寫了一下,應該也會有人需要用到(而且總會有機會透過search engine找到這篇blog :p)。這段code的用途,就是當你可能需要利用HTTP GET送出一段query,而query的內容可能有非ASCII字元,而server又假設使用的是UTF-8 encoding時(例如,你想要對Google送出某個含中文的查詢字串),你就會需要做上述的編碼。做法很簡單,主要是利用Win32的MultiByteToWideChar及WideCharToMultiByte這兩個API。先利用MultiByteToWideChar把預設code page下的字串轉成wide characters,再利用WideCharToMultiByte把wide characters轉成UTF-8 encoding的multi bytes。轉完之後,就可以做URL encoding中會需要的16進位表示。這個轉換只適合那種用兩個bytes表示的encoding(因為:MultiByteToWideChar(CP_ACP, 0, str+i, 2, wc, 1)),例如Big5或GB blah blah的。
bool toURL(char *str, char *result)
{
int n = strlen(str);
char *p = result;
//
for(int i=0;i<n;i++)
{
if( str[i] == 0 )
break;
if( str[i] > 0 )
*p++ = str[i];
else
{
char buf[32];
WCHAR wc[3];
unsigned char mb[3];
//
MultiByteToWideChar(CP_ACP, 0, str+i, 2, wc, 1);
wc[1] = '\0';
WideCharToMultiByte(CP_UTF8, 0, wc, 1, (char *) mb, 3, 0, 0);
//
sprintf(buf, "%%%2x%%%2x%%%2x", mb[0], mb[1], mb[2]);
strcpy(p, buf);
p += strlen(buf);
i++;
}
}
*p = '\0';
return true;
}
Blogged with Flock
Posted at 11:40下午 一月 02, 2008 by Chien-Hsing Wang in General | 迴響[2]
星期三 一月 02, 2008

qing 老大:
query string:
"JavaScript URLEncodeing" or
"JavaScript Escape"
就可以找到一堆 :)
這類型的轉換程式還不用搬
其他編譯語言來做, 嘿嘿
1.FireFox & IE 對 escape() 的處理, 已經通吃全部進化到輸 UTF-8
2.現在想輸出 Big5/JIS...其他
國家語系編碼
單單使用 escape() 已經行不通了
還得要搭配 VBScript 做字元轉換
然後 IE 限定 Orz
3.以上都是前陣子為了
Big5 URL Encode (JavaScript)
實作後的發現
由...發表 Kyo on 一月 07, 2008 at 02:29 下午 CST #
可是,我不是在Web上做啊 :p
由...發表 Qing on 一月 07, 2008 at 06:11 下午 CST #