我正在使用NSXML Parser在我的iPhone应用程序中进行解析。现在一切正常,除非数据有法语版。
例如,来自服务器的数据为Ch\u00e9rie FM
。
现在在string
方法的foundCharacters
参数下,我只得到字符串'Ch'其余字符不会出现。所以最后我的字符串被截断为整个Cherie fm
可以做些什么?
代码:
- (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];
// }
}
答案 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?
希望这有助于所有寻求解决方案的人。 :)