所以我有以下代码:
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个日志中,它被解码并打印为“é”(这正是我所寻找的)。
答案 0 :(得分:2)
如您所述,您需要返回UTF8或UTF16编码的XML文档。然后使用stringByReplacingPercentEscapesUsingEncoding:
方法使用相关编码制作NSString
个对象。
答案 1 :(得分:1)
NSString有method to return data in encoding,从网址读取数据:
+(ID)stringWithContentsOfURL:编码:错误:
在String Encodings部分下查找可能的编码以找到合适的编码。
答案 2 :(得分:0)
查看:propertyList
的NSString
文档,我们看到:
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格式存储NSString
,NSDictionary
,NSArray
和其他核心类型的表示形式。这些.plist
文件通常用于存储首选项或应用程序设置。
默认情况下,此XML格式的属性列表文档以UTF-8编码。当您将NSString
转换为属性列表元素时,对"é"
字符进行编码会将其替换为UTF-8 Unicode character "\U00e9"
。