NSXMLParser с данными UTF8

Мне очень трудно понять это, и я буду очень признателен за любую помощь.

Я пытаюсь разобрать строку 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.734 SwypeSendForMac2 [34354: 4233] Error Domain = NSXMLParserErrorDomain Code = 73 «Операция не может быть завершена. (NSXMLParserErrorDomain error 73.)» 2010-07-19 17: 13: 35.736 SwypeSendForMac2 [34354: 4233] Домен ошибки = NSXMLParserErrorDomain Code = 76 «Операция не может быть завершена. (Ошибка NSXMLParserErrorDomain 76.)»


person thewormsterror    schedule 19.07.2010    source источник
comment
хотя это не имеет ничего общего с вашей проблемой, мне интересно, какое может быть использование параметра withLength, поскольку NSString знает его длину, которая не является количеством байтов в форме UTF-8, а количеством символов (Unicode).   -  person mvds    schedule 19.07.2010


Ответы (1)


В вашем методе подключения, который вызывает xml, попробуйте заменить любые проблемные символы чем-то вроде этого:

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

Вышеупомянутая строка заменяет все амперсанды на и, может быть, использовать это для замены одиночных кавычек?

Кроме того, я считаю, что «ошибка 76» как-то связана с тем, что тег xml не закрывается.

РЕДАКТИРОВАТЬ: Только что понял, сколько ему лет, возможно, приведенная выше информация будет полезна будущим поисковикам.

person Joe    schedule 07.02.2012