Мне очень трудно это понять, и я был бы очень признателен за любую помощь.
Я пытаюсь проанализировать строку 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 'RIGHT SINGLE QUOTATION MARK' (U + 2019), который есть в моей строке, и я получаю эту ошибку:
2010-07-19 17: 13: 35.734SwypeSendForMac2 [34354: 4233] Ошибка Domain = NSXMLParserErrorDomain Code = 73 «Операция не может быть завершена. (NSXMLParserErrorDomain ошибка 73.)» 2010-07-19 17: 13: 35.736 SwypeSendForMac2 [34354: 4233] Ошибка Domain = NSRrorDoarser= 76 "Операция не может быть завершена. (NSXMLParserErrorDomain ошибка 76.)"