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 エンコードされたテキストをデコードするためのより良い方法はありますか?