0

そのため、NSXMLParserには、Windows-1252エンコーダーを使用した文字列の解析に問題があります。今、私はそれをNSUTF8StringEncodingに変換するための解決策をこのページで見つけました。しかし、今では解析できない文字にぶつかります。

そのため、特殊文字をエスケープして、解析後に元に戻すと機能することがわかりました。例えば:

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

パーサーエラーが発生せずに_文字を使用できるため、NSXMLParserでは、値を適切な文字に戻すことができます。

それで、すべての特殊文字を置き換えることができるように、すべてのASCII文字をループする方法はありますか(もちろん、<、>、および_を除く)?

4

3 に答える 3

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 に答える
0

strがあると仮定すると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置き換えます。&&amp;

于 2009-08-07T14:12:06.290 に答える