본문 바로가기

ERROR : NSXMLParser Error

by 식 2010. 8. 23.

[NSXML initWithURL:..] 로 할때 에러날때는..
NSURLConnection 으로 일단 데이터를 받은다음에 데이터 제대로 들어왓는지 보고 바꿔주자..

1. '<' 앞에 화이트스페이스(공백, 리턴, 탭..)가 들어왔을때..
NSData > NSString로 서브스트링.. > NSData
NSString * buffer = [[NSString stringWithData:responseData encoding:NSUTF8StringEncoding];
buffer = [NSString stringWithString:[buffer rangeOfString:@"<"].location]; // 아니면 그냥 substringFromIndex로 해도 댐.
NSData * convertData = [buffer dataUsingEncoding:NSUTF8StringEncoding];

※ NSUTF8StringEncoding 아래의 경우 변환 해야댐..

2. EUC-KR.. NSXMLParser는 EUC-KR형식을 지원도 안해준다..
NSData > NSString로 인코딩 > NSData에서 또 인코딩

NSString * buffer= [[NSString alloc] initWithData:responseData encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingEUC_KR)]; // 혹은 encoding:(0x80000000 + kCFStringEncodingDOSKorean)
buffer = [buffer stringByReplacingOccurrencesOfString:@"EUC-KR" withString:@"UTF-8]; // 대소문자 알아서 구분하셈..
NSData * convertData = [str dataUsingEncoding:NSUTF8StringEncoding];

※ 이거땜에 하루종일 삽질.. 쉬밤.. 그냥 UTF-8을 쓰란 말이다.. ㅜㅜ

3. ..
뭐.. 열고닫기 잘못이거나.. 데이터를 아예 이상한걸 받아왓거나..? 1,2두개 짬뽕일 경우


그냥 옆에 맥보고 피씨에 따라쳤는데.. 오타는 셀프로 고칩시당..


=========
2011. 4. 19일 추가

NSURLConnection에서 인코딩방법 읽어올수 있었다.. 이걸로 통합적으로 관리하는 XMLParser를 만들어야할듯싶다..

근데 나 ASIHTTP에 갖다쓰는데 여기서도 있는지 한번 찾아봐야겠군.. 

요샌 다들 NSXMLParser 안쓰고 다 TB XMLParser쓰던데.. 속도가 빠른건 아는데.. 이게 따로 래핑해둔게 있어 편해서 계속 쓴다.. 크윽..

- (void) connectionDidFinishLoading:(NSURLConnection*)connection {
 NSString * strEncodingName = [response textEncodingName];
 if([strEncodingName isEqualToString:@"utf-8"])
 {
  // UTF-8
  result = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
 }
 else {
  // EUC-KR
  result = [[NSString alloc] initWIthData:receivedData encoding:-214781280];
}

반응형