程式者的胡言亂語

pageicon 星期三 一月 02, 2008

Win32上做UTF-8的URL編碼

今天需要用到一段code,遍尋而不可得,所以動手寫了一下,應該也會有人需要用到(而且總會有機會透過search engine找到這篇blog :p)。這段code的用途,就是當你可能需要利用HTTP GET送出一段query,而query的內容可能有非ASCII字元,而server又假設使用的是UTF-8 encoding時(例如,你想要對Google送出某個含中文的查詢字串),你就會需要做上述的編碼。做法很簡單,主要是利用Win32MultiByteToWideCharWideCharToMultiByte這兩個API。先利用MultiByteToWideChar把預設code page下的字串轉成wide characters,再利用WideCharToMultiBytewide characters轉成UTF-8 encodingmulti bytes。轉完之後,就可以做URL encoding中會需要的16進位表示。這個轉換只適合那種用兩個bytes表示的encoding(因為:MultiByteToWideChar(CP_ACP, 0, str+i, 2, wc, 1)),例如Big5GB 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

Tags:

迴響:

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 #

發表迴響:
  • HTML 語法: 關閉
把對母乳媽媽的感謝與支持傳出去

« 九月 2010
星期日星期一星期二星期三星期四星期五星期六
   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  
       
今日

Search this blog

Links

Weblog menu

Today's referrers

Feeds