在MeToo的研发过程中,部分模块需要使用http请求向服务器同时传输图片和一些附属信息。由于图片使用NSDATA格式传输,附属信息使用JSON格式传输,而消息的body只能支持其中一种格式,因此在只要传输JSON信息的时候,使用UTF8编码传输;在需要同时传输图片和附属信息时,将图片以二进制格式放在body里,附属信息的JSON放在header里,如下所示:

[[SVHTTPClient sharedClientWithIdentifier:@"upload"] setValue:_delegate.userID forHTTPHeaderField:@"userid"];
。。。。。。
[[SVHTTPClient sharedClientWithIdentifier:@"upload"]POST:POSTVOTE_SERVLET parameters:[NSDictionary dictionaryWithObjectsAndKeys:imageData, @"image",nil]completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) { …… }];

但这里有个问题,在httpheader中设置的编码格式只对body起作用,header本身只支持ascii的文本,如果将中文放在header中(即使用JSON包装也一样),传到服务器端后服务器解析不出来,从而报JSON格式错误。

解决方法是,对汉字进行UTF编码,得到类似16进制的文本串,在作为JSON的数据传输。Objectivec中的代码为:

NSString *str = @"中国1美国a23";
NSString *unicodeStr = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", unicodeStr);

输出结果为:

%E4%B8%AD%E5%9B%BD1%E7%BE%8E%E5%9B%BDa23

该结果有两点问题:

1,        oc只能用”%”来标记一个字节的16进制数,而java的写法是”\x”

2,        对于latin字符,如示例中的1,2,3,a,oc不会对其进行编码,而如果用JAVA的UTF8编码会将”1”编码成”\x31”的形式

因此在还原时,不能对oc编码后的结果直接还原,而需要先将%E4替换为\xE4的形式(其实是转成0XE4形式),对于没有替换的latin字符则直接读入不做任何处理。

服务器端的java代码如下:

 public static String hex2Str(String str) throws UnsupportedEncodingException {byte[] byteArr = new byte[1024];int num=0;for (int i = 0; i < str.length();) {if (str.charAt(i)=='%'){Integer hexInt = Integer.decode("0x" + str.charAt(i+1) + str.charAt(i+2));byteArr[num] = hexInt.byteValue();i+=3;num++;}else{byteArr[num] = (byte)str.charAt(i);num++;i++;}}byteArr[num] = '\0';return new String(byteArr, "UTF-8");}

Http request传输图片和附属信息(old)相关推荐

  1. R语言ggplot2可视化移除轴标签、图例、主体等所有附属信息实战

    R语言ggplot2可视化移除轴标签.图例.主体等所有附属信息实战 目录 R语言ggplot2可视化移除轴标签.图例.主体等所有附属信息实战

  2. Request获取url各种信息的方法

    Request获取url各种信息的方法 Request.UrlReferrer的用法 下列情况下,此属性值是有效的: (1)直接使用<a href>链接: (2)通过表单提交的方式,或者说 ...

  3. 不能解决,复选框在request对象获取的信息后显示在用户信息里面为中文的选项名...

    因为方框里面value 不用中文?.? 假如用中文呢?  完全可以!!已经试验 如果不用中文,那么中文可以用对象的参数来获得,即在login.jsp中就要用javabean类属性 转载于:https: ...

  4. thinkphp5基本的一些操作/API友好/获取请求信息(Request)/判断请求类型(GET...)/验证参数数据(Validate)/连接数据库/原生sql语句查询

    文章目录 一.API友好 1.举两个thinkphp5关于API友好的例子 (1)数据输出 (2)错误调试Trace 二.获取请求信息(Request) 1.获取URL信息 2.获取 模块/控制器/操 ...

  5. request对象简介和获取客户机信息

    request对象(请求对象)ServletRequest|HttpServletRequest 获取客户机信息getRemoteAddr(*****) 获取IP地址getMethod() (**** ...

  6. 使用 file_get_contents 获取网站信息报错failed to open stream: HTTP request failed!

    使用 filegetcontents 获取网站信息报错failed to open stream: HTTP request failed! 当使用php5自带的filegetcontents方法来获 ...

  7. 查看HTML请求(request)中的标头(Headers)信息

    目录 ■Chrome ■IE ■curl  命令 ■CURL 扩展 ■扩展2:本地网站 agent    英[ˈeɪdʒənt]  n. 代理人,代理商: request中,user-agent 信息 ...

  8. HTTP,request,response

    一.HTTP协议 Hypertext Transfer Protocol,超文本传输协议,HTTP 是一个在计算机世界里专门在两点之间传输文字.图片.音频.视频等超文本数据的约定和规范. HTTP 优 ...

  9. request 和response

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

  10. Request对象 --web浏览器向web服务端的请求

    参考文档:http://blog.csdn.net/u012986057/article/details/50570325 一]Request对象常用方法         1)StringBuffer ...

最新文章

  1. java分布式+高可用_[Java复习] 分布式高可用-Hystrix
  2. 欧盟发布《人工智能道德准则》:「可信赖 AI」才是 AI 的指路明灯
  3. 生成树、最小生成树的一些性质以及邻域的概念
  4. 国航移动门户让我出行无忧
  5. Freetype学习笔记(轉)
  6. java其他进程,Java进程优先于其他Windows进程
  7. 《现代操作系统》精读与思考笔记 第一章 引论
  8. JS实现新打开网页最大化or全屏显示
  9. 算法精解----快速排序(方式1)
  10. .axf文件_Jlink使用技巧之单独下载HEX文件到单片机
  11. 新媒体运营胡耀文教程:从运营角度,教你4招破解销售推销套路
  12. 关于2022虎符pwn mva解决jmp rax无法反汇编的这么个事情
  13. Windows***与提权技巧汇总
  14. cutting stock 问题的列生成算法
  15. matplotlib绘制饼图
  16. 立创元件导入AD集成库的方法
  17. CP 15 协处理器
  18. Linux 笔试面试常见题目
  19. 在线播放音乐AVPlayer的使用
  20. 迪赛智慧数——其他图表(平行坐标图):家庭未来资产配置意愿

热门文章

  1. 问题与解决_IDEA-> Project Structure -> Artifacts-> ‘项目名‘ module: ‘Web‘ facet resources 显示红色
  2. 太过伤心,小王被这 10 道 Java 面试题虐哭了
  3. 为什么要研发vin码识别?
  4. 直播软件搭建时如何在视频通话中加入美颜处理
  5. 嵌入式linux检测U盘拔插
  6. java wait until_java调用ktr文件trans.waitUntilFinished()超时
  7. 【案例】足球运动员分析
  8. D.Stressful Training--Educational Codeforces Round 61 (Rated for Div. 2)(二分+优先队列)
  9. 1867最短路径问题(SPFA)
  10. 回收戴尔R740 R740XD - CSDN