2013-06-03 39 views
0

我解析其中包含UTF8 NO-BREAK SPACE(C2A0)某些UTF8文本而不是常规空格字符,这是造成用的NSXMLParser问题。因此,例如“我是一个字符串”包含3个常规空格字符将作为一个整体字符串传递给解析器:(NSXMLParser *)解析器foundCharacters:(NSString *)字符串。 (NSXMLParser *)解析器foundCharacters:(NSString *)带有4个子字符串的字符串。这个字符串包含4个子字符串。(NSString *)字符串包含4个子字符串。UTF8 NO-BREAK SPACE造成问题的NSXMLParser

我只是想提取“我是一个字符串”,有制作,如果遇到这些UTF8字符NSURLConnection的未分解成子任何巧妙的解决办法?

我没有在输入控件 - 它来自服务器的UTF8编码XML通过HTTP。

+0

这是HTML或XML?周围是什么文字?标签?引号?你有在文件中定义的DTD吗? –

+0

它的XML与被标记包围的文本。 – Gruntcakes

+0

DTD在顶部?喜欢的东西: –

回答

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]; 

你甚至可以找双空间,并与一个单一的一个替换它们。

+0

我不明白你的意思,改变空格字符在哪里?我无法控制输入,它来自服务器。 – Gruntcakes