首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows-1252编码的NSXMLParser

Windows-1252编码的NSXMLParser
EN

Stack Overflow用户
提问于 2009-08-07 12:40:29
回答 3查看 514关注 0票数 0

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

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

代码语言:javascript
复制
string = [string stringByReplacingOccurrencesOfString:@":" withString:@"__58__"];

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

那么,有没有一种方法可以遍历所有ASCII字符,这样我就可以替换所有特殊字符(当然,<,>和_除外)?

EN

回答 3

Stack Overflow用户

发布于 2009-08-07 13:09:12

完全未经测试。我甚至不知道它是否可以编译,但它可能会让您走上正确的道路。string必须是NSMutableString

代码语言:javascript
复制
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;
  }
}
票数 0
EN

Stack Overflow用户

发布于 2009-08-07 14:12:06

假设您有一个NSMutableString字符串,您可以执行以下操作:

代码语言:javascript
复制
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;

票数 0
EN

Stack Overflow用户

发布于 2009-08-07 14:42:12

感谢大家的帮助,这段代码实际上解决了我的问题:

代码语言:javascript
复制
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]];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1244506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档