NSXMLParser 无法解析特殊字符(重音) [英] NSXMLParser can't parse special characters (accents)
问题描述
我正在使用 NSXMLParser 从 url 解析 xml(我的代码几乎与 这里)
I'm using NSXMLParser to parse an xml from a url (my code is almost exactly the same as here)
某些元素包含特殊字符,例如á",这会导致单词 lik ándre 分裂为两个(á 和 ndre).
Some of the elements contain special characters like "á" which causes a word lik ándre to split into two (á and ndre).
这是我的 loadXMLByURL
Here is my loadXMLByURL
-(id) loadXMLByURL:(NSString *)urlString{
tickets = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;}
我很确定这是因为未设置编码(我认为它需要是 NSUTF8StringEncoding)但我不确定在哪里/如何应用它.
I'm pretty sure it's because the encoding is not set (I think it needs to be NSUTF8StringEncoding) but I'm not sure where/how to apply it.
[更新]我的其余代码...
[UPDATE] Rest of my code...
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"ticket"])
{
currentTicket = [Ticket alloc];
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"name"])
{
currentTicket.name = currentNodeContent;
}
else if ([elementname isEqualToString:@"title"])
{
currentTicket.title = currentNodeContent;
}
else if ([elementname isEqualToString:@"status"])
{
currentTicket.status = currentNodeContent;
}
else if ([elementname isEqualToString:@"ticket"])
{
[tickets addObject:currentTicket];
[currentTicket release];
currentTicket = nil;
[currentNodeContent release];
currentNodeContent = nil;
}
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
[更新 2]示例 xml...
[UPDATE 2] Sample xml...
<RB>
<list>
<ticket>
<name>Andrew Ford</name>
<title>3rd release</title>
<status>1</status>
</ticket>
<ticket>
<name>David Jenkins</name>
<title>3rd release</title>
<status>0</status>
</ticket>
<ticket>
<name>Luis gomez ándre</name>
<title>3rd release</title>
<status>1</status>
</ticket>
</list>
</RB>
推荐答案
我会将 url 加载到 NSString
然后像这样转换.
I would load the url to an NSString
and then convert like this.
-(id) loadXMLByURL:(NSString *)urlString{
tickets = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSError *error;
NSString * dataString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;
}
部分问题可能是您的 parser:foundCharacters:
方法正在分配给您的 currentNodeContent
而不是附加.请参阅以下链接中的 Apple 文档.
Part of the problem may be that your parser:foundCharacters:
method is assigning to your currentNodeContent
instead of appending. See the Apple Doc at the following link.
来自文档:
因为字符串可能只是当前元素的全部字符内容的一部分,所以应该将其附加到当前的字符累积中,直到元素发生变化.
Because string may be only part of the total character content for the current element, you should append it to the current accumulation of characters until the element changes.
这篇关于NSXMLParser 无法解析特殊字符(重音)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!