Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 当正文中包含表情符号时,HTTP POST失败_Objective C_Node.js_Express_Http Post_Emoji - Fatal编程技术网

Objective c 当正文中包含表情符号时,HTTP POST失败

Objective c 当正文中包含表情符号时,HTTP POST失败,objective-c,node.js,express,http-post,emoji,Objective C,Node.js,Express,Http Post,Emoji,我正在为用户在uiTextField中输入的任何内容进行HTTP POST。文本捕获在NSString中,然后将其添加到NSDictionary中。然后将其转换为JSON,最后转换为NSData,作为HTTP主体的UTF8 如果用户输入了纯文本,则此操作非常有效。但是,如果用户输入了emoji,那么它将一直工作到HTTP POST本身 从NSString到NSDict再到JSON的转换非常好。它甚至以UTF8格式转换为NSData。但是当调用POST时,它会抛出一个错误。这是我的密码: 当我试图

我正在为用户在uiTextField中输入的任何内容进行HTTP POST。文本捕获在NSString中,然后将其添加到NSDictionary中。然后将其转换为JSON,最后转换为NSData,作为HTTP主体的UTF8

如果用户输入了纯文本,则此操作非常有效。但是,如果用户输入了emoji,那么它将一直工作到HTTP POST本身

从NSString到NSDict再到JSON的转换非常好。它甚至以UTF8格式转换为NSData。但是当调用POST时,它会抛出一个错误。这是我的密码:

当我试图将JSON转换为NSData(UTF8)时,它实际上发生了,这样我就可以将它作为HTTP正文传递给我从应用程序到后端的帖子。以下是它抛出错误的区域:

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从iphone发送表情符号时,它会在node.js中点击此方法,并立即抛出以下错误:它不会打印第一行--“输入sendMessage--”:

我得到的职位是没有准备好正确处理表情。但是我在Xcode中没有看到任何关于POST尝试的错误

我对此感到困惑,请建议如何解决此问题


提前感谢。

我能够解决这个问题。我在Xcode中做了一个小小的更改,允许node.js成功地接受HTTP post并正确地处理它。以下是我更改的代码行:

旧方法:

NSData *requestBodyData = [NSData dataWithBytes:[jsonPushData UTF8String] length:[jsonPushData length]];
将其更改为:

NSData *requestBodyData = [jsonPushData dataUsingEncoding:NSUTF8StringEncoding];

现在消息和表情符号如预期般到达。

嘿,这对我解决同样的问题帮助很大。但愿我能投10倍的票。非常感谢。
NSData *requestBodyData = [jsonPushData dataUsingEncoding:NSUTF8StringEncoding];