0

因此 NSXMLParser 在使用 Windows-1252 编码器解析字符串时存在问题。现在我确实在此页面上找到了将其转换为 NSUTF8StringEncoding 的解决方案。但现在它遇到了无法解析的字符。

所以我发现如果我转义特殊字符然后在解析后将其传输回来,它会起作用。例如:

string = [string stringByReplacingOccurrencesOfString:@":" withString:@"__58__"];

由于允许使用 _ 字符而不会出现解析器错误,并且在 NSXMLParser 中,我可以将值传输回正确的字符。

那么有没有一种方法可以遍历所有 ASCII 字符,以便替换所有特殊字符(当然除了 <、> 和 _)?

4

3 回答 3

0

假设您有一个NSMutableStringstr,您可以执行以下操作:

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对这些值使用实体,例如替换&&amp;.

于 2009-08-07T14:12:06.290 回答
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]];
}
于 2009-08-07T14:42:12.190 回答
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;
  }
}
于 2009-08-07T13:09:12.450 回答