难以解析包含'\ u00'等字符的响应

时间:2011-08-16 16:40:24

标签: iphone objective-c xml-parsing nsxmlparser nsxml

我正在使用NSXML Parser在我的iPhone应用程序中进行解析。现在一切正常,除非数据有法语版。

例如,来自服务器的数据为Ch\u00e9rie FM

现在在string方法的foundCharacters参数下,我只得到字符串'Ch'其余字符不会出现。所以最后我的字符串被截断为整个Cherie fm

的'Ch'intead

可以做些什么?

代码:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict
{   
    if (appDelegate.objPlayer.fromFlickrorRecommend == TRUE)
    {
        if([elementName isEqualToString:@"outline"] && [[attributeDict valueForKey:@"text"] isEqualToString:@"You may also like"])
        {
            flagCheck = 1;
        }
        else if ([elementName isEqualToString:@"outline"] && [[attributeDict valueForKey:@"text"] isEqualToString:@"Genres"]) 
        {
            flagCheck = 0;
        }
        if (flagCheck == 1 && [elementName isEqualToString:@"outline"])
        {
            if([[attributeDict valueForKey:@"type"] isEqualToString:@"audio"])
            {
                [appDelegate.objPlayer.recommendDataArray addObject:attributeDict];

            }
        }
    }
    else
    {
        if ([elementName isEqualToString:@"location"])
        {
            flagCheck = 2;
        }
        else if ([elementName isEqualToString:@"url"])
        {   
            flagCheck = 3;
        }
        else if ([elementName isEqualToString:@"name"])
        {   
            flagCheck = 4;
        }
    }   
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{ 
    if (flagCheck == 2)
    {
        flagCheck = -1;
        appDelegate.objPlayer.flickrCity = string;
    }
    else if(flagCheck == 3)
    {
        flagCheck = -1;
        appDelegate.objPlayer.stationURL = string;
    }
    else if(flagCheck == 4)
    {
        flagCheck = -1;
        appDelegate.playStationName = string;
    }
    //else if(flagCheck == 0) // change
//  {
//      appDelegate.playStationName = string;
//  }

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{   
    //if (flagCheck == 1 && [elementName isEqualToString:@"outline"])
//  {
//      [appDelegate.objPlayer.recommendDataArray addObject:dataDictionary];
//      dataDictionary = nil;
//      [dataDictionary release];
//  }
}

2 个答案:

答案 0 :(得分:2)

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string可能会多次调用,因此您需要将找到的字符累加到NSMutableString中。有一个如何在Event-Driven XML Programming Guide中实现这一点的例子。

  

解析器对象可以发送几个委托   parser:foundCharacters:报告一个字符的消息   元件。因为字符串可能只是整个字符的一部分   当前元素的内容,您应该将其附加到当前元素   字符的积累直到元素改变。

现在\u00e9é的UTF-16,因此必须正确编码数据以解析过去\ u00。因此,如果您的数据最初是一个字符串,您可以像这样从中获取数据。

NSString *text = @"<node>Ch\u00e9rie</node>";
//Important or the parser will stop after Ch
NSData *utf16encode = [text dataUsingEncoding:NSUTF16StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:utf16encode];

答案 1 :(得分:0)

得到答案:

当我通过stackoverflow处理类似于我的问题的问题时,这个链接有所帮助。

Why does arrays handle strings containing swedish ÅÄÖ characters by using two or more indexes?

希望这有助于所有寻求解决方案的人。 :)