2013-08-16 2 views
0

<tag></tag> 또는 <tag>content</tag>과 같은 XML 파서를 실행합니다. 어느 쪽이든 나중에 사용하기 위해 노드 내용을 저장합니다.정확한 문자를 결정하는 방법

어딘가에 줄을 긋습니다. 내용이 비 었는지 확인하고 싶습니다. 나는 비어있는 노드가 @""이거나 심지어 (null) 일 것이라고 생각했지만 그 중 어느 것도 맞지 않습니다.

NSString이 빈 노드를 나타내는 지 확인할 수 있기를 원합니다. NSString을 NSLogging하면 어떤 종류의 개행이 발생하지만, @"\n"@"\r"을 확인하면 그 중 하나가 아님을 알 수 있습니다.

그래서 실제자를 포함하는 이스케이프 시퀀스를 NSString으로 기록하는 방법이 있습니까? NSLog(@"\n"); 같은 새로운 줄 대신 "\n" 출력합니다.

답변

1

한 (더러운?) 내 마음이 NSJSONSerialization 는 모든 제어 및 기타 비 ASCII 문자가 빠져 있다는 사실 사용하는 것입니다으로 그 온다 트릭 :

NSString *foo = @"a\nb\rc d\t e\001\002"; 

NSData *json = [NSJSONSerialization dataWithJSONObject:@[foo] options:0 error:NULL]; 
NSString *escaped = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", escaped); 

출력 :

 
["a\nb\rc d\t e\u0001\u0002"] 
+0

감사합니다. 그것이 ""\ n \ t \ t "'어떻게 든 나타났습니다. –

1

마틴 문자를 기록하기 위해 할 수있는 일의 예를 보여주었습니다. 당신이 CFStringTransform을 사용할 수 있습니다, 당신은 단지 XML의 16 진수로 제어 문자를보고 싶다면,

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; 
NSLog(@"%@", data); 

를 또는,하지만 변하지 인쇄 가능한 문자를 남겨 : 또는 당신은 NSData에 저장할 수 있고 진수에서 볼

NSMutableString *mutableString = [string mutableCopy]; 
CFStringTransform((__bridge CFMutableStringRef)mutableString, NULL, kCFStringTransformToXMLHex, NO); 

그러나 파서가 <tag></tag>을 만날 때 저장하는 항목에 대한 대답은 모두 구현 방법에 달려 있으며 질문이있을 경우 수행 한 내용을 표시합니다. 하지만 우리 대부분은 alloc이고 initNSMutableString이고, didStartElement 인 경우 foundCharacters에 문자열을 추가 한 다음 Google 모델 didEndElement에 저장합니다. 이 시나리오에서 빈 태그는 길이가 0 인 가변 문자열을 반환합니다 (예 : @"", 변경 가능한 문자열 제외). @""이 아니라고 어떻게 결론하셨습니까? [string isEqualToString:@""]을 확인한 경우 정상적으로 작동했을 것입니다. 당신이 당신의 결과로부터 여분의 공백을 트림하려는 경우, 당신은 didEndElement에, 같은 것을 할 수 그런데

: 여분의 공백이나 개행 문자가 있다면,

self.modelObject.someStringProperty = [self.parsedString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

그 방법을, 그들은 밖으로 나간다.

관련 문제