2012-07-02 4 views
0

내 프로그램은 다른 국가의 서버와 인터페이스하며 정기적으로 외국 문자가 포함 된 URL을 처리해야합니다. 이것은 æ, øå과 같은 스칸디나비아 문자를 고려할 때까지 제대로 작동합니다. 이 제대로 이러한 문자를 해독하는 데 실패스칸디나비아 문자 æ, ø, å가 잘못 이스케이프 처리되었습니다.

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

    return (s)?s:string; 
} 

그러나 : 나는 URL을 받으면 다음과 같이, 나는 그것을 해독

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

어떻게 출력 메시지를 생성합니까? – 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" 

URLEncode()에 전달 된 생성 된 NSString을 확인하십시오. 표시된 다른 코드는 정확합니다 (Objective-C에서 예외를 처리하는 경우는 드뭅니다).

+0

귀하는 정확합니다. UTF-8로 인코딩 된 문자열을 ASCII로 렌더링하는 버그가 있었고 이전에 발생하지 않은 것으로 보이는 UTF-8 인코딩으로 인해 2 차 인코딩이 수행되었습니다. – joverboard

관련 문제