当正文中有表情符号时,HTTP POST失败

我正在做任何用户在uiTextField中input的HTTP POST。 文本被捕获在NSString中,然后被添加到一个NSDictionary。 然后它被转换为JSON,最后转换为UTF8的NSData作为HTTP Body。

如果用户input纯文本,这完美的作品。 但是,如果用户input了表情符号,那么它会一直工作到HTTP POST自身的位置。

从NSString到NSDict到JSON的转换都很好。 它甚至被转换为UTF8的NSData。 但是当POST被调用时会抛出一个错误。 这是我的代码:

这实际上是当我试图将JSON转换为NSData(UTF8)时发生的,所以我可以将它作为HTTP Body传递给我从应用程序到后端的POST。 以下是引发错误的区域:

NSString *jsonPushData = [self mutDictToJson:pushData]; NSLog(@"sendMessage:jsonPushData has: %@",jsonPushData); //NSData *requestBodyData = [NSData dataWithBytes:[jsonPushData UTF8String] length:[jsonPushData length]]; NSData *requestBodyData = [NSData dataWithBytes:[jsonPushData UTF8String] length:[jsonPushData length]]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: restApiUrl cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 10.0]; NSLog(@"sendMessage:requestBodyData has: %@ with length: %lu",requestBodyData, [jsonPushData length]); [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)[requestBodyData length]] forHTTPHeaderField:@"Content-Length"]; [request setHTTPMethod: @"POST"]; [request setHTTPBody: requestBodyData]; returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil]; 

这里是node.js中的代码:

 // get all the insert (accessed at POST http://localhost:8080/api/insert) router.route('/sendMessage') .post(function(req, res) { console.log('-- Entered Send Message -- at:' + getDateTime()); var message = req.body.message; console.log("tag is: " + req.body.tag + " message is: "+message) azureNh.sendPushViaApns(req.body.tag, req.body.message); res.write("Response from Post function"); res.end("end connection"); }); 

当我发送纯文本时,按预期工作。 但是当我通过HTTP POST发送表情符号时,它会在node.js中触发这个方法,并立即抛出以下错误:它不会打印第一行“–Entered sendMessage – ”:

  SyntaxError: Unexpected end of input at Object.parse (native) at parse (/home/azureuser/node_modules/body-parser/lib/types/json.js:88:17) at /home/azureuser/node_modules/body-parser/lib/read.js:108:18 at done (/home/azureuser/node_modules/body-parser/node_modules/raw-body/index.js:239:14) at IncomingMessage.onEnd (/home/azureuser/node_modules/body-parser/node_modules/raw-body/index.js:285:7) at IncomingMessage.g (events.js:199:16) at IncomingMessage.emit (events.js:104:17) at _stream_readable.js:908:16 at process._tickCallback (node.js:355:11) 

我得到的POST是不准备处理表情符号。 但是在POST尝试中,我没有在Xcode中看到任何错误。

我迷路了,请指教如何解决这个问题。

提前致谢。

我能解决这个问题。 我在Xcode中做了一个小小的改动,并且允许HTTP post被node.js成功接受并正确处理。 HEre是我改变的代码行:

旧方法:

 NSData *requestBodyData = [NSData dataWithBytes:[jsonPushData UTF8String] length:[jsonPushData length]]; 

将其更改为:

 NSData *requestBodyData = [jsonPushData dataUsingEncoding:NSUTF8StringEncoding]; 

现在,信息和表情符合预期的到达。