0

私のプログラムは他の国のサーバーとインターフェイスし、外国文字を含むURLを定期的に処理する必要があります。æこれは、、、、などのスカンジナビア文字を検討するまでは問題なく機能øåます。URLを受け取ったら、次のようにデコードします。

-(NSString*)urlDECODE:(NSString*)string
{
    NSString*   s = [string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    return (s)?s:string;
}

ただし、これではこれらの文字を正しくデコードできません。

filename: æøåa.rtf
input: %C3%83%C2%A6%C3%83%C2%B8a%C3%8C%C2%8Aa.rtf
output: æøaÌa.rtf

編集:これはエンコード機能です:

NSString * URLEncode(NSString * url)
{
    NSString* out = nil;
    @try
    {
        NSLog(@"BEFORE=%@",url);
        out = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSLog(@"AFTER=%@",out);
    }
    @catch (NSException * e)
    {
        NSLog(@"Encoding error: %@", e);
    }

return out;
}
4

1 に答える 1

1

元のURLがすでにUTF-8で誤ってエンコードされているようです。

"æøåa.rtf" == "\xc3\xa6\xc3\xb8a\xcc\x8aa.rtf"
               == "æ"      "ø"    "a\u030a" "a.rtf"  // in UTF-8
               == "æøåa.rtf"

URLEncode()に渡される構築されたNSStringを確認してください。あなたが示した他のコードは正しいです(Objective-Cで例外を処理することはめったにないことを除いて)。

于 2012-07-02T17:36:06.387 に答える