NSstream写编码问题

问题描述:

我试着发送使用NSoutputstream一个字符串,但我似乎无法得到正确的编码,使用dataWithContentsOfURL工程,并使用与actionHero库中的TCP的NodeJS服务器NSstream写编码问题

IM。

它使用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]]); 
} 

我从手柄流事件法空streamError

找到了我自己的问题的答案。事实证明,问题出在actionHero的数据方法中,它寻找/ n,这是ios应用程序不提供的。附加一个\ n和它的罚款现在

+0

请关闭...并且你能标记这个'actionhero' – Evan 2014-05-10 06:34:51

不知道的response的内容,我不能给你一个明确的答案,为什么NSUTF8StringEncoding不使用它。但是,一般来说,如果您的内容中有一个与UTF-8不兼容的字节序列,当您拨打-dataUsingEncoding:时,您将得到零。

我从阅读Mike Ash's blog(请参阅“回退”部分)中学到了一种策略,在诸如您的情况下,它给了我很好的服务。

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