目标c-NSstream写入编码问题



我试图使用NSoutputstream发送字符串,但我似乎无法正确编码,使用dataWithContentsOfURL可以

im使用带有actionHero库的nodejs TCP服务器。

它使用netcat和telnet。

- (IBAction)sendText:(id)sender {
NSString *response  = [NSString stringWithFormat:@"%@", [_sendTextField.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
NSLog(@"writing %@",response);
///////////////////////////// this line works/////////////////////////////////////////////////////
//  NSData *data = [[NSData alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL   URLWithString:@"http://www.google.com"]]];

///////////////////////////// this line doesnt work/////////////////////////////////////////////////////
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSUTF8StringEncoding]];

//%u returns a non zero value
NSLog(@"%u",[outputStream write:[data bytes] maxLength:[data length]]);
}

我从handle-stream事件方法得到一个null streamError

由于不知道response的内容,我无法给出NSUTF8StringEncoding不适用于它的具体答案。但是,一般来说,如果您的内容中有一个字节序列与UTF-8不兼容,那么当您调用-dataUsingEncoding:时,您将得到nil。

我从阅读Mike Ash的博客中学到了一个策略(请参阅"Fallbacks"一节),在你这样的情况下,它对我很有帮助。

简单总结一下,首先尝试使用NSUTF8StringEncoding。如果不起作用,请尝试使用NSISOLatin1StringEncoding。如果这不起作用,请尝试使用NSMacOSRomanStringEncoding。迈克的博客有这样的理由。

找到了我自己问题的答案。事实证明,问题出在actionHero的on data方法中,该方法查找的是ios应用程序没有提供的a/n。附加了一个\n及其精细现在

最新更新