【问题标题】:How to convert NSData which contains a line break to a NSString如何将包含换行符的 NSData 转换为 NSString
【发布时间】:2014-12-01 16:45:07
【问题描述】:

以下代码完美地将我从 URL/JSON 文件获取的 NSData 转换为 NSString,EXCEPTION MADE 在数据包含 换行符的情况下!

我的代码有什么问题?

我的代码:

NSError  *errorColetar = nil;
NSURL    *aColetarUrl = [[NSURL alloc]initWithString:@"http://marcosdegni.com.br/petsistema/teste/aColetar3.php"];
NSString *aColetarString = [NSString stringWithContentsOfURL:aColetarUrl encoding:NSUTF8StringEncoding error:&errorColetar];

NSLog(@"NSString: %@", aColetarString);

if (!errorColetar) {
    NSData *aColetarData = [aColetarString dataUsingEncoding:NSUTF8StringEncoding];
    self.arrayAColetar = [NSJSONSerialization JSONObjectWithData:aColetarData options:kNilOptions error:nil];
}
NSLog(@"arrayAColetar %@", self.arrayAColetar);

日志结果:

**NSString**: [{"id_atendimento":"2","observacoes":"ABC-Enter-->
DEF-Enter-->
GFH-END"},{"id_atendimento":"1","observacoes":"123Enter-->
345Enter-->
678End"}]

**arrayAColetar** (null)

如你所见,我的底线是一个空数组:(

提前致谢!

【问题讨论】:

  • NSData 不可能包含换行符,因为它不(必然)表示字符数据,而只是字节。 (这是你的错误:error:nil]。)
  • 感谢您的帮助。我会研究这个错误。

标签: ios7


【解决方案1】:

通过检查隐藏在 'error:nil' 下的错误消息,我发现了“字符周围未转义的控制字符”问题,并从 Unescaped control characters in NSJSONSerialization 实现了以下代码 并得到一个新的“清理”字符串。

- (NSString *)stringByRemovingControlCharacters: (NSString *)inputString { 

NSCharacterSet *controlChars = [NSCharacterSet controlCharacterSet]; 
NSRange range = [inputString rangeOfCharacterFromSet:controlChars]; 
if (range.location != NSNotFound) { 
    NSMutableString *mutable = [NSMutableString stringWithString:inputString]; 
    while (range.location != NSNotFound) { 
        [mutable deleteCharactersInRange:range]; 
        range = [mutable rangeOfCharacterFromSet:controlChars]; 
    } 
    return mutable; 
} 
return inputString; 

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多