2013-07-24 2 views
2

난 그냥 NSURLResponse 개체의 NSStringEncoding 상수를 반환하는 함수 또는 기존 범주가 있는지 알고 싶었습니다.NSURLResponse에서 NSStringEncoding을 감지하는 기능?

웹 서비스 응답 데이터를 String으로 변환 할 때 NSUTF8StringEncoding 인코딩을 하드 코드 한 다음 웹 서비스가 때때로 UTF8로 인코딩 된 응답을 반환하므로 실제로 문제가 발생합니다. ASCII로 인코딩되는 경우도 있습니다. (물론 모든 인코딩에 대해서는 확신 할 수 없지만 예를 들어 일본어, 중국어 등의 응답에 다른 언어 문자가있는 경우도 있습니다)

내 아이디어는 NSURLResponse에서 인코딩하고 을 반환합니다.

NSURLResponse * response = // NSURLResponse object (web service response headers) 
NSData * responseData = // NSData object (web service response data) 
NSStringEncoding encoding = [response stringEncodingUsed]; 
NSString * responseText = [[NSString alloc]initWithData:responseData encoding:encoding]; 
+0

글쎄, urlResponse에서 인코딩 헤더를보고 적합한 인코딩을 탐지하는 방법을 알고 있지만 누군가가 이미 이런 종류의 함수를 작성했기를 바랬습니다. –

+1

http://stackoverflow.com/questions/5268661/how-to-detect-text-file-encoding-in-objective-c (하지만 데이터를 먼저 파일에 기록해야합니다.)를보십시오. –

답변

8

더 좋은 방법이 있습니다.

URLResponse에서 인코딩 이름을 문자열로 가져온 다음 적절한 NSStringEncoding을 검색 할 수 있습니다.

NSString *encodingName = [aURLResponse textEncodingName]; 
NSStringEncoding encodingType = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName)); 

또한 encodingName은 전무하고있을 제공된 encodingName 대한 적절한 결과가없는 경우 encodingType 변수에 대한 결과 값은 유효하지 않을 것이다.