来自URL编码问题的NSArray

时间:2009-05-26 05:18:40

标签: iphone cocoa character-encoding

所以我有以下代码:

NSURL *baseURL = [NSURL URLWithString:@"http://www.baseurltoanxmlpage.com"];
NSURL *url = [NSURL URLWithString: @"page.php" relativeToURL:baseURL];
NSArray *array = [NSArray arrayWithContentsOfURL:url];

如果XML页面如下:

<array><dict><key>City</key><string>Montreal</string></dict></array>

数组返回正常。但是,如果XML文件如下:

<array><dict><key>City</key><string>Montréal</string></dict></array>

数组返回null。我想这与特殊字母“é”有关。 我该如何处理这些角色? XML页面是使用PHP生成的。 utf8_encode()函数使数组返回,但后来我不知道如何处理编码的“é”字符。

以下是工作解决方案:

NSString *stringArray = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [stringArray propertyList];

NSLog(stringArray);
NSLog(@"%@", array);
NSLog([[[array objectAtIndex:0] valueForKey:@"City"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]);

第一个日志打印出“é”罚款。 在第二个日志中,它被编码并打印为“\ U00e9”。 在第3个日志中,它被解码并打印为“é”(这正是我所寻找的)。

3 个答案:

答案 0 :(得分:2)

如您所述,您需要返回UTF8或UTF16编码的XML文档。然后使用stringByReplacingPercentEscapesUsingEncoding:方法使用相关编码制作NSString个对象。

答案 1 :(得分:1)

NSString有method to return data in encoding,从网址读取数据:

+(ID)stringWithContentsOfURL:编码:错误:

String Encodings部分下查找可能的编码以找到合适的编码。

答案 2 :(得分:0)

查看:propertyListNSString文档,我们看到:

  • Parses the receiver as a text representation of a property list, returning an NSString, NSData, NSArray, or NSDictionary object, according to the topmost element.

property list是特定于Apple的文档,用于以XML格式存储NSStringNSDictionaryNSArray和其他核心类型的表示形式。这些.plist文件通常用于存储首选项或应用程序设置。

默认情况下,此XML格式的属性列表文档以UTF-8编码。当您将NSString转换为属性列表元素时,对"é"字符进行编码会将其替换为UTF-8 Unicode character "\U00e9"