2009-05-26 79 views
1

所以我有以下代碼:的NSArray從URL編碼的問題

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文件如下所示:

​​

數組返回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]); 

第一個日誌打印出 「E」 的罰款。 在第二個日誌中,它被編碼並打印爲「\ U00e9」。 在第三個日誌中,它被解碼並打印爲「é」(這正是我所尋找的)。

+0

您可能想使用`encoding:NSUTF8StringEncoding`來代替`encoding:4`。你永遠不知道蘋果是否可能將這4改變爲別的東西。有關NSStringEncoding類型,請參閱http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/c_ref/NSStringEncoding。 – 2009-05-27 18:01:47

+0

固定。非常感謝。 – samvermette 2009-05-27 18:07:12

回答

2

如您所述,您需要返回一個UTF8或UTF16編碼的XML文檔。然後使用相關編碼使用stringByReplacingPercentEscapesUsingEncoding:方法創建NSString對象。

+0

正如我在我的更新後的文章中寫道的,NSString現在可以獲得正確的字符串。但是,當我將它作爲propertyList返回時,特殊字符會丟失。 – samvermette 2009-05-27 14:09:12

0

縱觀NSString文檔:propertyList,我們看到:

  • 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是存儲的NSString表示,NSDictionaryNSArray,以及其他核心類型的蘋果專用文件以XML格式。這些.plist文件通常用於存儲首選項或應用程序設置。

默認情況下,此XML格式的屬性列表文檔編碼爲UTF-8。當您將NSString變成屬性列表元素時,編碼"é"字符會將其替換爲UTF-8 Unicode character "\U00e9"