IOS编码ISO-8859-9

时间:2013-05-05 20:44:12

标签: ios xml encoding touchxml latin9

我需要获取托管在Web上的XML文件的内容,然后解析它。

我决定使用TouchXML进行解析过程。但是,我无法获取文件的内容,因为它是用ISO-8859-9

编码的

XML文件网址:http://rss.haberler.com/mobil/sondakika2.asp?kategori=manset

我尝试了两种不同的方法。

1)将url的内容导入NSString:

NSString *url = @"http://rss.haberler.com/mobil/sondakika2.asp?kategori=manset";
NSError *error = nil;
NSStringEncoding encoding;
NSString *xmlString = [[NSString alloc] initWithContentsOfURL: [NSURL URLWithString:url] usedEncoding:&encoding error:&error];

xmlString变为null,错误描述如下:

The operation couldn’t be completed. (Cocoa error 261.)

我没有使用usedEncoding,而是尝试明确指定编码,从UTF-8到NSISOLatin1StringEncoding和NSISOLatin2StringEncoding(遗憾的是,我找不到NSISOLatin9StringEncoding)。

2)我还尝试将xml加载到NSData中。

NSError *error = nil;
NSData *XMLData   = nil;
XMLData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:url] options:0 error:&error];

当我构造XML Parser时,特定字符是未知的,当我获得字符串值时,应用程序终止。

CXMLDocument *doc = [[CXMLDocument alloc] initWithData:XMLData options:0 error:nil];
NSArray *nodes = [doc nodesForXPath:@"//item" error:nil];
for (CXMLElement *node in nodes) {
    for(int counter = 0; counter < [xmlElement childCount]; counter++) {
        CXMLNode * child = [xmlElement childAtIndex:counter];
        NSString *childName = child.name;
        NSString * childValue = [child stringValue];
    }
}

获取子语言的stringValue将使用SIGABRT终止应用程序。

我该如何解决问题?

1 个答案:

答案 0 :(得分:1)

从TouchXML CXMLDocument.m文件中,这是initWithData:的样子

- (id)initWithData:(NSData *)inData options:(NSUInteger)inOptions error:(NSError **)outError
{
return [self initWithData:inData encoding:NSUTF8StringEncoding options:inOptions error:outError];    
}

您可以尝试执行的操作是,在此文件中,将NSUTF8StringEncoding替换为NSASCIIStringEncoding或其使用的任何编码。这可能会解决它。