带有UTF8数据的NSXMLParser
我正在努力弄清楚这一点,并非常感谢任何帮助。带有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)”
在您的连接方法调用XML,试图用这样的更换任何有问题的字符:
NSString *final = [connRespStr stringByReplacingOccurrencesOfString:@"&" withString:@" and "];
上面一行替换所有&符号与和,也许使用这同时更换燎报价?
,我相信“错误76”有事情做与不打烊的XML标签。
编辑:刚刚意识到这是多大年纪,也许上述信息将是值得未来的搜索者。
虽然这与您的问题无关,但我不知道'withLength'参数的用法是什么,因为'NSString'知道它的长度,这不是UTF-8格式的字节数,而是(Unicode)字符数。 – mvds 2010-07-19 10:13:30