2012-04-15 2 views
0
내가 웹에서 얻을 수있는 XML 파일에 포함 된 텍스트를 표시해야

와 UTF8에서 XML 문자열. ?이 파일로 시작아이폰, 잘못된 문자

< XML 버전 = "1.0"인코딩 = "UTF-8">

... 다음과 같이 기록 된 텍스트 노드가 :

< 텍스트> <는! [CDATA는 [그럼에도 불구하고, 부활절 의례 인 스프링 정복 시간 빛, 또는 섬과 tempo.Pasqua에 충실 북부 도시의 매력 퍼가기 할 수있는 기회입니다 ... ]]> </텍스트>

이 잘 UTF-8 텍스트를 포맷인가?

나는이 모든 것을 시도했다, 그러나 아직도 "A"와 "이다"와 "그것의"로 "그것을"대체 할 수 없습니다 :

text = ^the string from above^ 
NSData* data_text = [text dataUsingEncoding:NSUTF8StringEncoding]; 
NSString* text_c3 = [[NSString alloc] initWithBytes:[data_text bytes] length:[data_text length] encoding:NSUTF8StringEncoding]; 

const char* utfstring = "E ancora, il fascino delle città del nord,";// [text UTF8String]; 
NSString* text_c1 = [[NSString alloc] initWithUTF8String:utfstring]; 
NSString* text_converted = [NSString stringWithCString:utfstring encoding:NSUTF8StringEncoding]; 

어떤 제안? 감사합니다.

+0

xml 안에 à 또는 Ã가 있습니까? –

+0

'utfstring'은 UTF8String 문자열이 아닙니다. 이것은 단지 8 비트 문자열입니다. 129-255 범위의 문자에 대한 인코딩을 가지고있는 내부'kCFStringEncodingMacRoman' 형식 일 것입니다. 유니 코드에서 이러한 문자는 여러 개의 (이 경우 두 개의) 8 비트 코드로 구성되며, – zaph

답변

0

그것은 CDATA 부분이 제대로 UTF-8 인코딩 여부 질문에서 알 수 없습니다. 데이터가 바이너리 데이터를 인코딩하기 때문에, 당신은 (즉, 16 진수 표현) 이진 데이터가 아닌 텍스트를 게시해야합니다.

또한, 모든 코드 샘플 소스 코드 파일이 다시 질문에서 결정할 수없는 올바른 인코딩으로 저장되는에 따라 달라집니다.

난 당신 같은 내장 NSXMLParser 클래스와 XML 데이터를 구문 분석 괜찮은 XML 파서를 사용 제안했다. 는 CDATA 섹션을 발견하면, 그것은 당신의 대리자를 호출에 상관없이 원래의 인코딩이 무엇인지, UTF-8 인코딩으로 바이너리 데이터로 텍스트를 통과하지 않습니다.

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)cdataBlock 
{ 
    NSString *text = [NSString stringWithUTF8String: [cdataBlock bytes]]; 

    // do something with the text... 
} 

을 그리고 당신은 이진 데이터로 XML 파일을 검색하고 XML 데이터로 XML 파서에 전달해야합니다 : 당신은 다음 문자열로 변환 할 수 있습니다. 그렇지 않은 경우에는 불필요한 decodings 및 인코딩을해야합니다 그리고 당신은 인코딩을 손상시킬 가능성이 높다.

0

NSURL URL * = [NSURL URLWithString @ "http://www.yourURL.com"];

//NSString *jsonRequest = [NSString stringWithFormat:@"&json_data=%@",[[NSString stringWithFormat:@"{\"createInvoice\":{\"client_id\":\"%@\",\"address\":\"\",\"invoice_title\":\"%@\",\"number\":\"\",\"date\":\"%@\",\"due_date\":\"%@\",\"late_fee\":\"\",\"schedule_date\":\"%@\",\"po_number\":\"\",\"status\":\"paid\",\"notes\":\"invoice notes\",\"terms\":\"invoice terms\",\"items\":[{\"name\":\"Test4\",\"type\":\"Product\",\"description\":\"\",\"unit_cost\":\"15\",\"quantity\":\"100\",\"discount\":\"10\",\"discount_type\":\"Percent\",\"tax1_name\":\"\",\"tax1_type\":\"\",\"tax2_name\":\"\",\"tax2_type\":\"\",\"tax1_percent\":\"\",\"tax2_percent\":\"\"}]}}",selected_Client_ID,invoiceTitleTxtFld.text,invoiveDateTxtFld.text,invoiceDueDateTxtFld.text,scheduleOnTxtFld.text] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 



NSString *jsonRequest = [NSString stringWithFormat:@"&json_data=%@",[[NSString stringWithFormat:@"{\"updateInvoice\":{\"invoice_id\":\"%@\",\"client_id\":\"60105\",\"address\":\"ABS\",\"invoice_title\": \"%@\",\"number\":\"inv-7774 new\",\"date\":\"2012-03-30\",\"due_date\":\"2012-04-30\",\"late_fee\":\"\",\"schedule_date\":\"2012-03-31\",\"po_number\":\"PO-7770\",\"status\":\"paid\",\"notes\":\"invoice notes\",\"terms\":\"invoice terms\",\"items\":[{\"name\":\"Test4\",\"type\":\"Product\",\"description\":\"Test4 desc\",\"unit_cost\":\"15\",\"quantity\":\"100\",\"discount\":\"10\",\"discount_type\":\"Percent\",\"tax1_name\":\"\",\"tax1_type\":\"\",\"tax2_name\":\"\",\"tax2_type\":\"\",\"tax1_percent\":\"\",\"tax2_percent\":\"\"}]}}",delegate.invoice_ID,invoiceTitleTxtFld.text] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 


NSData *json_data = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 


[request setHTTPMethod:@"POST"]; 
[request setHTTPBody: json_data]; 
NSLog(@"%@",json_data); 
//[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
//[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:[NSString stringWithFormat:@"%d", [json_data length]] forHTTPHeaderField:@"Content-Length"]; 
[request setHTTPBody:[[jsonRequest stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding] 
         dataUsingEncoding:NSUTF8StringEncoding 
         allowLossyConversion:YES]]; 

// [NSURLConnection connectionWithRequest:[request autorelease] delegate:self]; 

NSUrlsConnection conn_InvEdit * = [있는 NSURLConnection ALLOC] initWithRequest : 요청 대리인 : 자기]; 이

같은 태그

// Successful connection. 
if (conn_InvEdit) { 

    // [self initSpinner]; 
    // [self spinBegin]; 

    NSMutableData *data = [[NSMutableData alloc] init]; 
    self.receivedData=data; 
    [data release]; 
} 
// Unsuccessful connection. 
else { 

} 
// Clean up 
[url release]; 
[request release]; 
// Close keypad. 

Try with this code, If you still have any problem then send me your complete question at [email protected] I'll send you sample app with solution. 
0

...

추가 ...

[setValue의 요청을 "은 application/x-www-form-urlencoded로는"forHTTPHeaderField @ "Content-Type을 '@] 사용;

및 [setString : [NSString stringWithFormat : @ "% d", [json_data length]] forHTTPHeaderField : @ "Content-Length"]에 대한 요청; [요청 setHTTPBody : [[jsonRequest stringByAddingPercentEscapesUsingEncoding : NSASCIIStringEncoding] dataUsingEncoding : NSUTF8StringEncoding allowLossyConversion : YES]];