我试图使用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及其精细现在