1

URL エンコードされたサーバーから送信されたテキストをデコードしようとしていますが、これが私が見つけた最良の方法です。

URLEncoding には次の標準関数を使用します。

NSString* encodeToPercentEscapeString(NSString *string) {
    return (__bridge NSString *)
    CFURLCreateStringByAddingPercentEscapes(NULL,
                                        (__bridge CFStringRef) string,
                                        NULL,
                                        (CFStringRef) @"!*'();:@&=+$,/?%#[]",
                                        kCFStringEncodingUTF8);
}

NSString* decodeFromPercentEscapeString(NSString *string) {
    return (__bridge NSString *)
    CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
                                                        (__bridge CFStringRef) string,
                                                        CFSTR(""),
                                                        kCFStringEncodingUTF8);
}

特殊文字をエンコードする場合:

NSString* encoded = encodeToPercentEscapeString(@"ąśżźćęółń");

@"%C4%85%C5%9B%C5%BC%C5%BA%C4%87%C4%99%C3%B3%C5%82%C5%84" を取得します

これは大丈夫です。

しかし、それをデコードしようとすると:

NSString* original = decodeFromPercentEscapeString(encoded);

私は :@"ńÖŇõŇľŇļńáńô√≥ŇāŇĄ" を得ます。

なんで?

URL エンコードされたテキストをデコードするためのより良い方法はありますか?

4

1 に答える 1

1

試しました-[NSString stringByReplacingPercentEscapesUsingEncoding:]か?

また、ブリッジキャストを誤って使用しています。ARCは文字列を所有していることを知らないため、作成された文字列はリークします。CFBridgingRelease()を使用します。これは、Core Foundationの「作成」関数のバランスを取るために通常必要なCFRelease()のバリアントであるため便利ですが、ARCと連携します。

于 2012-04-04T15:47:42.370 に答える