0

通常のスペース文字の代わりに UTF-8 NO-BREAK SPACE (C2A0) を含む UTF8 テキストを解析していますが、これが NSXMLParser で問題を引き起こしています。

たとえば、3 つの通常の空白文字を含む「I am a string」は、文字列全体として parser:(NSXMLParser *)parser foundCharacters:(NSString *)string に渡されます。

ただし、通常のスペースの代わりに 3 つの NO-BREAK-SPACES を含む「私は文字列です」と、4 つの部分文字列を含む parser:(NSXMLParser *)parser foundCharacters:(NSString *)string が 4 回呼び出されます。

「私は文字列です」を抽出したいだけですが、これらのUTF8文字に遭遇した場合、NSURLConnectionが部分文字列に分割されないようにするための適切な解決策はありますか?

入力を制御することはできません-サーバーからUTF8でエンコードされたXML over HTTPとして送信されます。

4

1 に答える 1

0

使用されたことのない Unicode 文字 (シンボル) を見つけ、NSString を使用してスペース文字を別のものに変更し、必要なものを抽出して、文字列の逆コーディングを行います。

編集: Web ページを NSData オブジェクトとして取得するとします。

NSString *str = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSString *nStr = [str stringByReplacingOccurrencesOfString:@"\uC2A0" withString:@"\u2208"];
NSData *nData = [[nStr ]dataUsingEncoding:NSUTF8StringEncoding];
// do your parsing
// for each parsed string
NSString *nStr = [str stringByReplacingOccurrencesOfString:@"\u2208" withString: @"\uC2A0"];

これにより、最後に正確な入力文字列が取得されます。しかし、これらの Unicode スペースを忘れて、実際のスペースに変換したいだけかもしれません。

NSString *nStr = [str stringByReplacingOccurrencesOfString:@"\u2208" withString: @" "];
NSString *str = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSString *nStr = [str stringByReplacingOccurrencesOfString:@"\uC2A0" withString:@"\u2208"];
NSData *nData = [[nStr ]dataUsingEncoding:NSUTF8StringEncoding];

二重のスペースを探して、単一のスペースに置き換えることもできます。

于 2013-06-03T22:34:48.097 に答える