今天在弄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...