0

我正在解析一些包含 UTF-8 NO-BREAK SPACE (C2A0) 而不是常规空格字符的 UTF8 文本,这会导致 NSXMLParser 出现问题。

例如,包含 3 个常规空格字符的“我是一个字符串”将作为一个完整的字符串传递给解析器:(NSXMLParser *)parser foundCharacters:(NSString *)string。

但是,包含 3 个 NO-BREAK-SPACES 而不是常规空格的“我是一个字符串”会导致 4 次调用 parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 和 4 个子字符串。

我只想提取“我是一个字符串”,如果遇到这些 UTF8 字符,是否有任何巧妙的解决方案可以让 NSURLConnection 不将其分解为子字符串?

我无法控制输入 - 它来自服务器作为 UTF8 编码的 XML over HTTP。

4

1 回答 1

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

您甚至可以查找双空格并将其替换为单个空格。

于 2013-06-03T22:34:48.097 回答