URLEncodedであるサーバーから送信されたテキストをデコードしようとしていますが、これは私が見つけた最も良い方法です。URLエンコードされた非標準文字
私はURLEncododingのためにこれらの標準機能を使用します。
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 "
これはOKです。
しかし、私はそれを解読しようとした場合:
NSString* original = decodeFromPercentEscapeString(encoded);
私が取得: "ńÖŇõŇľŇļńáńô√≥ŇāŇĄ" @。
なぜですか?
URLエンコードされたテキストをデコードする方法はありますか?
はい、あります。同じことが起こります。しかし、ブリッジの先端のキャストはありがとう。 – myszon
私はいくつかの他の問題がなければならないと思います。 $ python >>> CoreFoundation import * >>> CFURLCreateStringByReplacingPercentEscapesUsingEncoding(なし、% "%C4%85%C5%9B%C5%BC");コード化された文字列を使用するだけで、Pythonで簡単にテストできます。 \ xc4 \ x85 \ xc5 \ x9b \ x9 \ x9b \ x9b \ x9b \ x9b \ xc5 \ xbc \ xc5 \ xba \ xc4 \ x87 \ xc4 \ x99 \ xc3 \ xb3 \ xc5 \ x82 \ xc5 \ x84 ' –
はい、しかし、何らかの理由で1文字として扱われるべきバイトのペアがあるかのように見えます二人として扱われる。 \ xc4 \ x85という意味は、± – myszon