Iphone NSXMLParser分割包含外部(unicode)字符的字符串
我在NSXMLParser方面遇到了一个特殊的问题 出于某种原因,它删除了所有挪威字符æ、ø和å前面的所有字符 但是,所有非a-z字符的问题似乎都是一样的。(所有外来字符) 示例: 现实:马尔 输出:ål 现实:爵士圣歌 产出:埃内斯 下面是日志中的一个示例,我从中打印了字符串:Iphone NSXMLParser分割包含外部(unicode)字符的字符串,iphone,utf-8,xml-parsing,nsxmlparser,Iphone,Utf 8,Xml Parsing,Nsxmlparser,我在NSXMLParser方面遇到了一个特殊的问题 出于某种原因,它删除了所有挪威字符æ、ø和å前面的所有字符 但是,所有非a-z字符的问题似乎都是一样的。(所有外来字符) 示例: 现实:马尔 输出:ål 现实:爵士圣歌 产出:埃内斯 下面是日志中的一个示例,我从中打印了字符串: - (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 日志: 您可以清楚地看到,每当它遇到外来字母时,它就会跳转到新行 我相
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
日志:
您可以清楚地看到,每当它遇到外来字母时,它就会跳转到新行
我相信我必须弄清楚如何附加字符串或类似的内容
以下是NSXMLParser文件:
SearchXMLParser.h
#import <Foundation/Foundation.h>
#import "Search.h"
@interface SearchXMLParser : NSObject <NSXMLParserDelegate>
{
NSMutableString *currentNodeContent;
NSMutableArray *searchhits;
NSMutableArray *trackhits;
NSXMLParser *parser;
Search *currentSearch;
}
@property (readonly, retain) NSMutableArray *searchhits;
@property (readonly, retain) NSMutableArray *trackhits;
-(id) loadXMLByURL:(NSString *)urlString;
@end
我已经检查了答案,并找到了一些类似的帖子,但没有给出明确的解决方案
有人能解释一下这个问题吗?:)非常感谢您的帮助 您的parser:foundCharacters:方法无法正常工作 这是从 parser对象可以向委托发送几个parser:foundCharacters:消息来报告元素的字符。因为字符串可能只是当前元素的全部字符内容的一部分,您应该将其附加到当前字符的累加中,直到元素更改为止 您可以尝试这样的方法(ARC):
您的parser:foundCharacters:方法无法正常工作 这是从 parser对象可以向委托发送几个parser:foundCharacters:消息来报告元素的字符。因为字符串可能只是当前元素的全部字符内容的一部分,您应该将其附加到当前字符的累加中,直到元素更改为止 您可以尝试这样的方法(ARC):
使用可变字符串追加找到的字符,在元素结束时刷新(重置)它。使用可变字符串追加找到的字符,在元素结束时刷新(重置)它。
#import <Foundation/Foundation.h>
#import "Search.h"
@interface SearchXMLParser : NSObject <NSXMLParserDelegate>
{
NSMutableString *currentNodeContent;
NSMutableArray *searchhits;
NSMutableArray *trackhits;
NSXMLParser *parser;
Search *currentSearch;
}
@property (readonly, retain) NSMutableArray *searchhits;
@property (readonly, retain) NSMutableArray *trackhits;
-(id) loadXMLByURL:(NSString *)urlString;
@end
#import "SearchXMLParser.h"
#import "Search.h"
@implementation SearchXMLParser
@synthesize searchhits, trackhits;
-(id) loadXMLByURL:(NSString *)urlString
{
searchhits = [[NSMutableArray alloc] init];
trackhits = [[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;
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"track"])
{
currentSearch = [Search alloc];
}
if ([elementname isEqualToString:@"track"])
{
currentSearch.trackurl = [attributeDict objectForKey:@"href"];
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"name"])
{
[trackhits addObject:currentNodeContent];
}
if ([elementname isEqualToString:@"track"])
{
currentSearch.track = [trackhits objectAtIndex:0];
currentSearch.artist = [trackhits objectAtIndex:1];
currentSearch.album = [trackhits objectAtIndex:2];
[trackhits removeAllObjects];
[searchhits addObject:currentSearch];
[currentSearch release];
currentSearch = nil;
[currentNodeContent release];
currentNodeContent = nil;
}
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@"found characters: %@", string);
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
- (void) dealloc
{
[parser release];
[super dealloc];
}
@end
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@"found characters: %@", string);
if (!currentNodeContent) {
currentNodeContent = [[NSMutableString alloc] init];
}
[currentNodeContent appendString:string];
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// your code here
// when you are done with the string:
currentNodeContent = nil;
}