带有 UTF8 数据的 NSXMLParser (NSXMLParserErrorDomain )

问题描述 投票:0回答:1

我真的很难弄清楚这个问题,非常感谢任何帮助。

我正在尝试使用

NSXMLParser
解析 UTF8 字符串,但它不起作用。

这是我的字符串:

<?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错误73。)”

2010-07-19 17:13:35.736 SwypeSendForMac2 [34354:4233]错误域= NSXMLParserErrorDomain代码= 76“操作无法完成。(NSXMLParserErrorDomain错误76。)”

objective-c utf-8 nsxmlparser
1个回答
1
投票

在调用 xml 的连接方法中,尝试用以下内容替换任何有问题的字符:

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

上面的行将所有与号替换为 and,也许用它来替换单引号?

另外,我相信“错误 76”与未关闭 xml 标签有关。

编辑:刚刚意识到这有多老了,也许上面的信息对未来的搜索者来说是有价值的。

© www.soinside.com 2019 - 2024. All rights reserved.