网络传输文本,urlEncode和urldecode的iOS实现。
2013-03-04 20:59
441 查看
url Encode和Decode的实现
源码下载地址(vs2005版本):http://download.csdn.net/detail/hherima/5108862也可以下载源码(ios版本):http://download.csdn.net/detail/hherima/5108862
下面是IOS的源码,注意将源文件后缀改为mm相关的VC后缀也改为mm
头文件
using namespace std; #include <string.h> #include <iostream> class UrlEncode { public: NSString* Encode(NSString*src); NSString* Decode(NSString* src); private: string HttpUrlDecode(const string& srcUrl); string HttpUrlEncode(const string& srcUrl); int hexchar2int(char c); string UrlEncodeFormat(const unsigned char cValue); string DecimalToHexString(unsigned int nValue); };源文件
#include "UrlEncode.h" NSString* UrlEncode::Encode(NSString*src) { string buf = HttpUrlEncode([src UTF8String]); return [NSString stringWithUTF8String:buf.c_str()]; } // NSString* UrlEncode::Decode(NSString* src) { string buf = HttpUrlDecode([src UTF8String]); return [NSString stringWithUTF8String:buf.c_str()]; } // string UrlEncode::HttpUrlDecode(const string& srcUrl) { string desStr; int length = 0; int flag =1; unsigned char firstNum = 0; unsigned char SecondNum = 0; const char * pchar = srcUrl.c_str();//.Ptr(); while(length < srcUrl.length()) { if(pchar[length]=='%')//&& length < srcUrl.length()-2 { //最后一位,need break; if(length == srcUrl.length()-1) { desStr +=pchar[length];//.append(pchar[length]); break; } //正常移位 length++; firstNum = hexchar2int(pchar[length]); length++; SecondNum = hexchar2int(pchar[length]); if (firstNum == -1 || SecondNum == -1)//判断字符转换成的整数是否有效 { flag = 0; break; } desStr += char(firstNum<<4) + char(SecondNum);//.append(char(firstNum<<4) + char(SecondNum)); } else if(pchar[length]=='+') { desStr +=' ';//.append(' ');//spaceb } //不是特殊字符的urlcode了,即英文字符,直接append到string即可 else { desStr +=pchar[length];// .append(pchar[length]); } length ++; } if(flag == 0) { return srcUrl; } return desStr; } // string UrlEncode::HttpUrlEncode(const string& srcUrl) { string encodedUrl=""; int length = srcUrl.length(); if (length == 0) { return encodedUrl; } string sDontEncode = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_~.";// // Parse a the chars in the url for (int i=0; i<length; i++) { char cToFind = srcUrl.at(i); if (-1 == sDontEncode.find(cToFind,0)) { // Char not found encode it. string tmp = UrlEncodeFormat(cToFind); encodedUrl.append(tmp); } else if(cToFind == ' ') { encodedUrl += '+';//.append('+'); } else { encodedUrl += cToFind;//.append(&cToFind,1); } } return encodedUrl; } // string UrlEncode::UrlEncodeFormat(const unsigned char cValue) { string tmp; tmp.append("%"); unsigned int nDiv = cValue/16; unsigned int nMod = cValue%16; tmp.append(DecimalToHexString(nDiv)); tmp.append(DecimalToHexString(nMod)); return tmp; } // string UrlEncode::DecimalToHexString(unsigned int nValue) { string tmp; if(nValue<10) tmp+= ((char)nValue +48);//append((int)nValue); else { switch(nValue) { case 10:tmp.append("A");break; case 11:tmp.append("B");break; case 12:tmp.append("C");break; case 13:tmp.append("D");break; case 14:tmp.append("E");break; case 15:tmp.append("F");break; default:break; } } return tmp; } /** *将hex字符转换成对应的整数 *return 0~15:转换成功,-1:表示c 不是 hexchar */ int UrlEncode::hexchar2int(char c) { if (c >= '0' && c <= '9') return c - '0'; else if (c >= 'a' && c <= 'f') return c - 'a' + 10; else if (c >= 'A' && c <= 'F') return c - 'A' + 10; else return -1; }
相关文章推荐
- 网络传输文本,urlEncode和decode的iOS实现。
- #IOS#点击button按钮改变自身显示的文本无法实现
- iOS使用NSMutableAttributedString实现富文本
- UDP实现网络数据传输
- C#实现网络传输数据加密
- 【读书笔记】iOS网络-保护网络传输
- iOS最笨的办法实现无限轮播图(网络加载)
- 微信小程序实现text文本包裹,和使用网络图片做背景
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--使用封装的网络服务2[使用IE浏览本页]
- iOS - NSMutableAttributedString 富文本的实现
- android 学习随笔七(网络:图片及文本传输及线程关系 )
- IOS - 富文本实现在UILabel中显示图片
- ios之UILabel实现文本自适应方法
- 我有个简单网络传输加密的想法,但不会实现,请高手给出代码
- iOS平台利用 NSURLProtocol 实现网络数据缓存
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>
- iOS网络编程实践--NSStream实现TCP Socket iPhone客户端
- iOS使用NSMutableAttributedString实现富文本
- 151202iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
- (五十九)iOS网络基础之UIWebView简易浏览器实现