我的程序与其他国家/地区的服务器连接,并且经常需要处理包含外来字符的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;
}
答案 0 :(得分:1)
您的原始网址似乎已经错误地以UTF-8编码。
"æøåa.rtf" == "\xc3\xa6\xc3\xb8a\xcc\x8aa.rtf"
== "æ" "ø" "a\u030a" "a.rtf" // in UTF-8
== "æøåa.rtf"
请检查传递给URLEncode()的构造的NSString。您显示的其他代码是正确的(除了在Objective-C中处理异常很少)。