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 回答