因此,NSXMLParser在使用Windows-1252编码器解析字符串时遇到了问题。现在,我在这个页面上找到了一个解决方案,可以将其转换为NSUTF8StringEncoding。但现在它遇到了无法解析的字符。
所以我计算出,如果我转义特殊字符,然后在解析后将其传回,它将会起作用。例如:
string = [string stringByReplacingOccurrencesOfString:@":" withString:@"__58__"];由于允许它使用_字符而不会得到解析器错误,并且在NSXMLParser中,我可以将值传回它正确的字符。
那么,有没有一种方法可以遍历所有ASCII字符,这样我就可以替换所有特殊字符(当然,<,>和_除外)?
发布于 2009-08-07 13:09:12
完全未经测试。我甚至不知道它是否可以编译,但它可能会让您走上正确的道路。string必须是NSMutableString。
NSRange r = NSMakeRange(0, [string length]);
while (r.location < [string length])
{
r = [string rangeOfCharactersFromSet:[NSCharacterSet symbolCharacterSet] options:0 range:r];
if (r.location != NSNotFound)
{
NSMutableString *replacement = [[NSMutableString alloc] initWithCapacity:6];
for (NSUInteger i = r.location; i <= NSMaxRange(r); i++)
{
unichar c = [string characterAtIndex:i];
if (c != "_")
{
[replacement appendFormat:@"__%d__", (unsigned)c];
}
}
[string replaceCharactersInRange:r withString:replacement];
[replacement release]; replacement = nil;
r.location = r.location + [string length] + 1;
r.length = [string length] - r.location;
}
}发布于 2009-08-07 14:12:06
假设您有一个NSMutableString字符串,您可以执行以下操作:
NSMutableString *str = ...;
[str replaceOccurrencesOfString:":" withString:@"__58__"
options:NSLiteralSearch
range:NSMakeRange(0, [str length])];
[str replaceOccurrencesOfString:"&" withString:@"__38__"
options:NSLiteralSearch
range:NSMakeRange(0, [str length])];你看到这个模式了!
您也可以仅使用XML实体来表示这些值,例如,将&替换为&。
发布于 2009-08-07 14:42:12
感谢大家的帮助,这段代码实际上解决了我的问题:
for (unichar asciiChar = 1; asciiChar <= 255; asciiChar++) {
NSString *stringWithAsciiChar = [NSString stringWithCharacters:&asciiChar length:1];
if (stringWithAsciiChar == nil) continue;
string = [string stringByReplacingOccurrencesOfString:stringWithAsciiChar withString:[NSString stringWithFormat:@"__%d__", asciiChar]];
}https://stackoverflow.com/questions/1244506
复制相似问题