繁体   English   中英

如何使用AFNetworking解析此响应:

[英]How to parse, with AFNetworking, This response:

我正在使用AFNetworking从网络上的控制器发送和接收响应。 控制器正在接收响应并发送回其响应,但是我的代码正在为其响应对象打印输出(空)。 我知道通过与控制器联系的其他方式可以收到正确的响应。

我真正的问题是如何使AFNetworking解析奇怪的响应。 它主要是html,但看起来很像xml,但是,它不是真正的xml,如您在下面看到的那样。 最重要的是,如何使AFNetworking只是转储响应内容,而不是忽略它并发布null。

这是我目前得到的答复:

2014-11-26 09:20:33.473 Airscape Fan Controller[24415:1292131] Response: (null)

这是我需要解析的响应格式:

fanspd<fanspd>1</fanspd>
doorinprocess<doorinprocess>0</doorinprocess>
timeremaining<timeremaining>0</timeremaining>
macaddr<macaddr>60:CB:FB:99:99:C0</macaddr>
ipaddr<ipaddr>10.0.0.18</ipaddr>
model<model>4.4eWHF</model>
softver: <softver>2.14.2</softver>
interlock1: <interlock1>0</interlock1>
interlock2: <interlock2>0</interlock2>
cfm: <cfm>1100</cfm>
power: <power>25</power>
inside: <house_temp>-99</house_temp>
<DNS1>10.0.0.1</DNS1>
attic: <attic_temp>74</attic_temp>
OA: <oa_temp>-99</oa_temp>
server response: <server_response>ë±(äqûÄýl[í6=sa(2ös’‹Ï</server_response>
DIP Switches: <DIPS>11100</DIPS>
Remote Switch: <switch2>1111</switch2>
Setpoint:<Setpoint>0</Setpoint>

对于如何获得此响应以通过AFNetworking的任何想法,将不胜感激。

我目前正在使用AFNetworking处理程序,如下所示:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:_url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@"Response inline: %@", string);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

当我删除以下行时:

NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

我得到以下回应:

<66616e73 70643c66 616e7370 643e323c 2f66616e 7370643e 0a646f6f 72696e70 726f6365 73733c64 6f6f7269 6e70726f 63657373 3e303c2f 646f6f72 696e7072 6f636573 733e0a74 696d6572 656d6169 6e696e67 3c74696d 6572656d 61696e69 6e673e30 3c2f7469 6d657265 6d61696e 696e673e 0a6d6163 61646472 3c6d6163 61646472 3e36303a 43423a46 423a3939 3a39393a 43303c2f 6d616361 6464723e 0a697061 6464723c 69706164 64723e31 302e302e 302e3138 3c2f6970 61646472 3e0a6d6f 64656c3c 6d6f6465 6c3e342e 34655748 463c2f6d 6f64656c 3e0a736f 66747665 723a203c 736f6674 7665723e 322e3134 2e323c2f 736f6674 7665723e 0a696e74 65726c6f 636b313a 203c696e 7465726c 6f636b31 3e303c2f 696e7465 726c6f63 6b313e0a 696e7465 726c6f63 6b323a20 3c696e74 65726c6f 636b323e 303c2f69 6e746572 6c6f636b 323e0a63 666d3a20 3c63666d 3e313830 303c2f63 666d3e0a 706f7765 723a203c 706f7765 723e3635 3c2f706f 7765723e 0a696e73 6964653a 203c686f 7573655f 74656d70 3e2d3939 3c2f686f 7573655f 74656d70 3e0a3c44 4e53313e 31302e30 2e302e31 3c2f444e 53313e0a 61747469 633a203c 61747469 635f7465 6d703e37 373c2f61 74746963 5f74656d 703e0a4f 413a203c 6f615f74 656d703e 2d39393c 2f6f615f 74656d70 3e0a7365 72766572 20726573 706f6e73 653a203c 73657276 65725f72 6573706f 6e73653e 8debb129 e40171fb c4fd6c5b ef363d72 612832f2 148d0c73 0e920c8b 0c180206 cf3c2f73 65727665 725f7265 73706f6e 73653e0a 44495020 53776974 63686573 3a203c44 4950533e 31313130 303c2f44 4950533e 0a52656d 6f746520 53776974 63683a20 3c737769 74636832 3e313131 313c2f73 77697463 68323e0a 53657470 6f696e74 3a3c5365 74706f69 6e743e30 3c2f5365 74706f69 6e743e>

感谢Pahnev发表评论并让我步入正轨。 我最终能够发现实际的问题是什么。 它是响应对象的编码。 我必须用正确的方法对其进行解码。

NSString *responseString = [[NSString alloc]initWithData:response encoding:NSASCIIStringEncoding];

重要的部分是:

response encoding:NSASCIIStringEncoding

在使用此编码之前,我实际上经历了许多不同的编码。 现在一切正常。

希望这可以帮助某人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM