我正在解析一些包含UTF-8 NO-BREAK SPACE(C2A0)而不是常规空格字符的UTF8文本,这会导致NSXMLParser出现问题。
因此,例如“我是一个包含3个常规空格字符的字符串”将作为整个字符串传递给解析器:(NSXMLParser *)解析器foundCharacters:(NSString *)string。
然而“我是一个字符串”包含3个NO-BREAK-SPACES而不是常规空格导致4次调用解析器:(NSXMLParser *)解析器foundCharacters:(NSString *)包含4个子字符串的字符串。
我只想提取“我是一个字符串”,是否有任何简洁的解决方案使NSURLConnection在遇到这些UTF8字符时不会将其分解为子字符串?
我无法控制输入 - 它来自服务器,是通过HTTP进行UTF8编码的XML。
答案 0 :(得分:0)
查找一些从未使用过的Unicode字符 - 某些符号 - 并使用NSString将空格字符更改为其他字符,然后提取所需内容,并对字符串执行反向编码。
编辑:所以假设您将网页作为NSData对象:
NSString *str = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSString *nStr = [str stringByReplacingOccurrencesOfString:@"\uC2A0" withString:@"\u2208"];
NSData *nData = [[nStr ]dataUsingEncoding:NSUTF8StringEncoding];
// do your parsing
// for each parsed string
NSString *nStr = [str stringByReplacingOccurrencesOfString:@"\u2208" withString: @"\uC2A0"];
这将在最后得到确切的输入字符串。但也许您只想忘记那些Unicode空间,只需将它们转换为实空间:
NSString *nStr = [str stringByReplacingOccurrencesOfString:@"\u2208" withString: @" "];
NSString *str = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSString *nStr = [str stringByReplacingOccurrencesOfString:@"\uC2A0" withString:@"\u2208"];
NSData *nData = [[nStr ]dataUsingEncoding:NSUTF8StringEncoding];
你甚至可以寻找双倍空格并用一个空格替换它们。