C语言实现encode和decode
Technorati 標簽:?urlencode,urldecode
先看個例子:
漢字 一 的UTF-8編碼為0xE4 0xb8 0x 80
我們在google里搜索一下“一”,地址欄顯示為:
可以看到url的字符串里有一個%E4%B8%80
這就是encode之后的值。因此,encode的處理過程也很明顯了。
特別是傳中文參數時,如果沒有encode,很容易出錯。
至于為什么要這么傳,就不知道了,今天,現來看下C語言如何實現url encode函數.
首先是urlencode的編碼規則,可以看這里,搜到一篇文章沒有仔細研究,可能有不全的地方:
http://hi.baidu.com/leejun_2005/item/9e0f4e4ba62cde0bc11613b5
解碼:
編碼:
/** =====================================================================================* Filename: url_encode.cpp* Description: url encode** Created: 07/04/2012 08:32:24 PM** Author: zhy (), izualzhy@163.com* =====================================================================================*/ #include <stdio.h> #include <string.h>/*** @brief URLEncode 對字符串URL編碼** @param str 原字符串* @param strSize 原字符串長度(不包括最后的\0)* @param result 結果緩沖區的地址* @param resultSize 結果緩沖區的大小(包括最后的\0)** @return: >0:resultstring 里實際有效的長度* 0: 解碼失敗.*/ int URLEncode(const char* str, const int strSize, char* result, const int resultSize) {int i;int j = 0;//for result indexchar ch;if ((str==NULL) || (result==NULL) || (strSize<=0) || (resultSize<=0)) {return 0;}for ( i=0; (i<strSize)&&(j<resultSize); ++i) {ch = str[i];if (((ch>='A') && (ch<'Z')) ||((ch>='a') && (ch<'z')) ||((ch>='0') && (ch<'9'))) {result[j++] = ch;} else if (ch == ' ') {result[j++] = '+';} else if (ch == '.' || ch == '-' || ch == '_' || ch == '*') {result[j++] = ch;} else {if (j+3 < resultSize) {sprintf(result+j, "%%%02X", (unsigned char)ch);j += 3;} else {return 0;}}}result[j] = '\0';return j; }int main(int argc, char* argv[]) {char* src = argv[1];unsigned int srclength = strlen(src);printf("src length: %d\n", strlen(src));char obj[100] = {0};URLEncode(src, srclength, obj, 100);printf("obj: %s\n", obj);printf("obj: %d\n", strlen(obj));return 0; }輸出:
y@y-VirtualBox:/mnt/Documents/Training$ ./url_encode 一^abc_二
src length: 11
obj: %E4%B8%80%5Eabc_%E4%BA%8C
obj: 25
y@y-VirtualBox:/mnt/Documents/Training$ ./url_decode %E4%B8%80%5Eabc_%E4%BA%8C
result: 11, 一^abc_二
使用google搜索下:
注:
1.AA –> “%AA”,使用sprintf。
2.”%AA” –> AA, 使用位移。
參考:
http://hi.baidu.com/zkheartboy/blog/item/5813a28fa0d224ebf11f363d.html
http://hi.baidu.com/leejun_2005/item/9e0f4e4ba62cde0bc11613b5
總結
以上是生活随笔為你收集整理的C语言实现encode和decode的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中嵌入正则表达式
- 下一篇: C语言文件操作函数大全(看到总结的真的很