2010-07-19 71 views
1

我正在努力弄清楚這一點,並非常感謝任何幫助。帶有UTF8數據的NSXMLParser

我想解析一個utf 8字符串與NSXMLParser,但它不會工作。

這裏是我的字符串

<?xml version="1.0" encoding="UTF-8"?><host><type>mac</type><port>62181</port><address>192.168.1.159</address><hostname>Samuel’s%20Mac%20Book</hostname><username>samuelw</username></host>

這裏的解析代碼

- (void) parse:(NSString*)XMLEncodedString withLength:(int)l_length { 
#ifndef NDEBUG 
NSLog(@"Received lookup %@",XMLEncodedString); 
#endif 
    NSData* data=[XMLEncodedString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; 
    [parser setDelegate:self]; // The parser calls methods in this class 
    [parser setShouldProcessNamespaces:NO]; // We don't care about namespaces 
    [parser setShouldReportNamespacePrefixes:NO]; // 
    [parser setShouldResolveExternalEntities:NO]; // We just want data, no other stuff 

    [parser parse]; // Parse that data.. 
    [parser release]; 
} 

的XMLEncodedString構造這樣

- (void) checkForReceive { 
//NSLog(@"listener: waiting to recvfrom...\n"); 

    addr_len = sizeof their_addr; 
    if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0, 
     (struct sockaddr *)&their_addr, &addr_len)) == -1) { 
     perror("recvfrom"); 
     return; 
    } 

    buf[numbytes] = '\0'; 
    NSString * string = [[NSString alloc] initWithUTF8String:buf]; 
    [self parse:string withLength:numbytes]; 
    [string release]; 

} 

我的問題是從Unicode字符來'正確的單引號'(U +2019),我在我的字符串中,我得到此錯誤:

2010-07-19 17:13:35.734 SwypeSendForMac2 [34354:4233]錯誤域= NSXMLParserErrorDomain代碼= 73「操作不能完成。 (NSXMLParserErrorDomain error 73.)「 2010-07-19 17:13:35.736 SwypeSendForMac2 [34354:4233]錯誤域= NSXMLParserErrorDomain代碼= 76」操作無法完成。 (NSXMLParserErrorDomain錯誤76)」

+0

雖然這與您的問題無關,但我不知道'withLength'參數的用法是什麼,因爲'NSString'知道它的長度,這不是UTF-8格式的字節數,而是(Unicode)字符數。 – mvds 2010-07-19 10:13:30

回答

0

在您的連接方法調用XML,試圖用這樣的更換任何有問題的字符:

NSString *final = [connRespStr stringByReplacingOccurrencesOfString:@"&" withString:@" and "];

上面一行替換所有&符號與和,也許使用這同時更換燎報價?

,我相信「錯誤76」有事情做與不打烊的XML標籤。

編輯:剛剛意識到這是多大年紀,也許上述信息將是值得未來的搜索者。