Url encode和decode 相關問題

2021-07-10 17:24:46 字數 2395 閱讀 2175

今天在弄url解碼時,弄了好久。比如我的url帶有中文,瀏覽器預設將中文轉成utf-8編碼,但是我進行utf-8解碼時,發現解析出來的中文是亂碼,並不是我想要的值。經過查詢資料,發現再將utf-8解析出來的亂碼,做一次utf-8 to gb2312就可以正常顯示了。

在 baidu 中是:

在 google 中是:

「中國」這兩個字在 baidu 中的編碼是 %d6%d0%b9%fa  為 gb2312 編碼後轉成 16 進製

在 google 中的編碼是 %e4%b8%ad%e5%9b%bd 為 utf-8 編碼後轉成 16 進製

下面的程式分可以把這兩種編碼解譯成原文 "中國". 歡迎拍碼

//從 url 專用格式字串還原成普通字串

#include #include using namespace std;

char char2int(char ch)

char str2bin(char *str)

string urldecode(string str);

~cutiltools(){};

//iinlen的長度不包括\0,應該用strlen。返回值是處理後的sout長度

static int utf8togb2312(char *sout, int imaxoutlen, const char *sin, int iinlen)

size_t isrclen=iinlen;

ret = iconv(cd, &pin,&isrclen, &pout,&ileftlen);

if (ret == (size_t) - 1)

iconv_close(cd);

return (imaxoutlen - ileftlen);

}//iinlen的長度不包括\0,應該用strlen。返回值是處理後的sout長度

static int gb2312toutf8(char *sout, int imaxoutlen, const char *sin, int iinlen)

size_t isrclen=iinlen;

ret = iconv(cd, &pin,&isrclen, &pout,&ileftlen);

if (ret == (size_t) - 1)

iconv_close(cd);

return (imaxoutlen - ileftlen);

}

};int main(int argc, char* argv)

;

int ilen = cutiltools::gb2312toutf8(pszdst, 50, pszori, strlen(pszori)); // gb2312toutf8

cout << ilen << "," << strerror(errno) << "," << pszdst << endl;

cout << "-----------" << endl;

char pszgbdst[50] = ;

int inewlen = cutiltools::utf8togb2312(pszgbdst, 50, pszdst, ilen); // utf8togb2312

cout << inewlen << "," << strerror(errno) << "," << pszgbdst << endl;

/*輸出為:

size:12

18,success,涓枃瀛楃嫻嬭瘯

-----------

12,success,中文字元測試

*///可以看出,utf8格式下,乙個中文字元佔三個位元組;而gb2312下佔兩個位元組。

return 0;

}

#include #include #include #include using namespace std;

typedef unsigned char byte;

byte tohex(const byte &x)

byte fromhex(const byte &x)

string urlencode(const string &sin)

//else if ( isspace( (byte)sin[ix] ) ) //貌似把空格編碼成%20或者+都可以

//else

sout += (char *)buf;

}return sout;

}string urldecode(const string &sin)

else if(sin[ix] == '+')

else

sout += (char)ch;

}return sout;

}int main(int argc,char *argv)

urlencode和rowurlencode的區別

urlencode 返回字串,此字串中除了 之外的所有非字母數字字元都將被替換成百分號 後跟兩位十六進製制數,空格則編碼為加號 rawurlencode 功能和urlencode基本一樣,採用的是rfc1738編碼,因此空格會編碼為 20。eg echo sales and marketing mi...

Python編碼 encode和decode的區別

code utf 8因為python 只檢查 coding 和編碼字串,所以你可能回見到下面的宣告方式,這是有些人為了美觀等原因才這樣寫的 coding utf 8 常見編碼介紹 gb2312編碼 適用於漢字處理 漢字通訊等系統之間的資訊交換 gbk編碼 是漢字編碼標準之一,是在 gb2312 80...

python中的encode和decode研究心得

最近在做nlp相關東西,需要從資料庫和文字等多個源讀取文字資料 中文 這就涉及到了文字編碼的轉換,小菜初次碰到這個問題,所以研究了一下,記錄下來。decode的作用是將其他編碼的字串轉換成unicode編碼,如str1.decode gb2312 表示將gb2312編碼的字串str1轉換成unico...