2012-07-02 1 views
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 

EDIT: Это функция кодирования:

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

Как вы генерируете выходные сообщения? – sergio

+0

вы пробовали с 'NSISOLatin1StringEncoding'. – rishi

+0

Кроме того, вы уверены, что вход (переменная 'string') верен? – Monolo

ответ

1

Кажется, ваш исходный URL-адрес уже ошибочно закодирован в UTF-8.

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

Пожалуйста, проверьте построенный NSString, переданный в URLEncode(). Другой код, который вы показали, правильный (за исключением того, что редко можно обрабатывать исключения в Objective-C).

+0

Вы абсолютно правы. Оказывается, была ошибка, которая приводила мои кодированные строки UTF-8 в ASCII, а затем вторичный код был предварительно сформирован из-за кодировки UTF-8, которая, как представляется, раньше не происходила. – joverboard