URLEncoded 인 서버에서 보낸 일부 텍스트의 디코딩을 시도하고 있으며 이것이 내가 관리 할 수있는 최상의 방법입니다.디코딩 URL 인코딩되지 않은 비표준 문자
나는 URLEncododing 이러한 표준 기능을 사용
NSString* encodeToPercentEscapeString(NSString *string) {
return (__bridge NSString *)
CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef) string,
NULL,
(CFStringRef) @"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
}
NSString* decodeFromPercentEscapeString(NSString *string) {
return (__bridge NSString *)
CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
(__bridge CFStringRef) string,
CFSTR(""),
kCFStringEncodingUTF8);
}
나는 특수 문자 인코딩하는 경우 : 내가 얻을
NSString* encoded = encodeToPercentEscapeString(@"ąśżźćęółń");
@ "%의 C4 %의 85 % C5 %의 9B %의 C5 %의 기원전 % C5 % BA % C4 % 87 % C4 % 99 % C3 % B3 % C5 % 82 % C5 % 84 "
괜찮 으면. 나는 그것을 해독하려고하면
는하지만 :
NSString* original = decodeFromPercentEscapeString(encoded);
를 내가 얻을 : @ "ńÖŇõŇľŇļńáńô√≥ŇāŇĄ을".
왜?
URLEncoded 텍스트를 디코딩하는 더 좋은 방법이 있습니까?
예, 있습니다. 같은 일이 일어난다. 다리 위의 팁을 주셔서 고마워한다. – myszon
다른 문제가 있다고 생각합니다. 인코딩 된 문자열 만 사용하여 파이썬에서의 빠른 테스트 결과 올바른 출력을 보여줍니다. $ python >>> CoreFoundation 가져 오기 * >>> CFURLCreateStringByReplacingPercentEscapesUsingEncoding (없음, "% C4 % 85 % C5 % 9B % C5 % BC \ xc4 \ x85 \ xc5 \ x9b \ uc2 \ uc2 \ uc2 \ uc2 \ uc2 \ uc2 " xc5 \ xbc \ xc5 \ xba \ xc4 \ x87 \ xc4 \ x99 \ xc3 \ xb3 \ xc5 \ x82 \ xc5 \ x84 ' –
예,하지만 어떤 이유로 한 문자로 처리해야하는 바이트 쌍이 2로 취급됩니다. that \ xc4 \ x85는 ± – myszon