因此,NSXMLParser在使用Windows-1252编码器解析字符串时遇到问题。现在我确实在这个页面上找到了一个解决方案,将其转换为NSUTF8StringEncoding。但是现在它碰到了无法解析的角色。
所以我发现,如果我要转义特殊字符然后在解析之后将其传回来,它将会起作用。例如:
string = [string stringByReplacingOccurrencesOfString:@":" withString:@"__58__"];
由于允许使用_字符而不会出现解析器错误,因此在NSXMLParser中我可以将值传回给它正确的字符。
那么有没有办法可以循环遍历所有ASCII字符,这样我就可以替换所有特殊字符(当然除了<,>和_)?
答案 0 :(得分:0)
完全未经测试。我甚至不知道它是否编译,但它可能会让你走上正轨。 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;
}
}
答案 1 :(得分:0)
假设您有一个NSMutableString
str,您可以执行以下操作:
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
个实体来获取这些值,例如将&
替换为&
。
答案 2 :(得分:0)
感谢大家的帮助,这段代码实际上解决了我的问题:
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]];
}