Objective-C 对二进制数据 NSData 进行 URL 编码
浏览:1431次 出处信息
Objective-C 和其它所谓的 Unicode 友好型编程语言, 大多对内存不友好, 这些语言一提到"二进制", 好像就当机了一样.
所以, 我认为 PHP 确实是最好的编程语言, 对于 PHP 来说, 字符串就是二进制, 二进制就是字符串, 不管你什么字符集. 这并不是说 PHP 支持 Unicode, 事实上, PHP 对 Unicode 的支持是最友好最高级的. 例如, 拿到一段内存, 你想把它当作为 UTF-8 或者 UTF-16, 随你意, 只要你认为它是什么, 它就是什么, 然后, PHP 提供了对应的函数来处理.
回到题目, 在 Objective-C 里, 要将一段二进制数据(也就是一段内存)进行 urlencode(URL 编码), 应该怎么做? 很不幸, CFURLCreateStringByAddingPercentEscapes() 函数只处理字符串. 没错, 又是字符串! 这就是不把字符串当二进制的坏处!
所以, 只能自己写一个函数.
static int is_safe_char(char c){
if(c == '.' || c == '-' || c == '_'){
return 1;
}else if(c >= '0' && c <= '9'){
return 1;
}else if(c >= 'A' && c <= 'Z'){
return 1;
}else if(c >= 'a' && c <= 'z'){
return 1;
}
return 0;
}
static NSString *urlencode_data(NSData *data){
NSMutableString *ret = [[NSMutableString alloc] init];
char *ptr = (char *)data.bytes;
int len = (int)data.length;
for(int i=0; i<len; i++){
char c = ptr[i];
if(is_safe_char(c)){
[ret appendFormat:@"%c", c];
}else{
[ret appendFormat:@"%%%02X", c];
}
}
return ret;
}
建议继续学习:
- 删除查看二进制日志 (阅读:3476)
- 字体文件也属于二进制文件 (阅读:3354)
- 浮点数的二进制表示 (阅读:3143)
- 文本与二进制方式打开文件的区别 (阅读:3074)
- 二进制的二三事 (阅读:2375)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:iOS开发Extra系列:NSString***
后一篇:iOS安全–不同平台的崩溃收集 >>
文章信息
- 作者:ideawu 来源: idea's blog
- 标签: 编码 NSData 二进制
- 发布时间:2016-03-01 23:45:03
近3天十大热文
-
[882] WordPress插件开发 -- 在插件使用 -
[136] 解决 nginx 反向代理网页首尾出现神秘字 -
[57] 整理了一份招PHP高级工程师的面试题 -
[55] 分享一个JQUERY颜色选择插件 -
[54] Innodb分表太多或者表分区太多,会导致内 -
[54] 用 Jquery 模拟 select -
[54] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] jQuery性能优化指南 -
[52] CloudSMS:免费匿名的云短信 -
[52] 海量小文件存储
