來自 URL 編碼問題的 NSArray (NSArray from URL encoding problem)


問題描述

來自 URL 編碼問題的 NSArray (NSArray from URL encoding problem)

So I have the following code:

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

If the XML page is as follows:

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

The array returns fine. However, if the XML file is as follows:

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

The array returns null. I guess this has something to do with the special char "é". How would I deal with these characters? The XML page is generated with PHP. utf8_encode() function makes the array return but then I don't know how to deal with the encoded "é" character.

Here's the working solution:

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]);

The first log prints out the "é" fine. In the second log, it's encoded and is printed as "\U00e9".  In the 3rd log, it's decoded and printed as "é" (which is what I was looking for).


參考解法

方法 1:

As you noted, you need to return a UTF8- or UTF16-encoded XML document. Then make NSString objects using the stringByReplacingPercentEscapesUsingEncoding: method, using the relevant encoding.

方法 2:

NSString has a method to return data in encoding, data read from the URL:

+(id)stringWithContentsOfURL:encoding:error:

Look under String Encodings section for possible encodings to find the one suitable.

方法 3:

Looking at the NSString documentation for :propertyList, we see:

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

A property list is an Apple-specific document that stores representations of NSStringNSDictionaryNSArray, and other core types in XML format. These .plist files are usually used for storing preferences or application settings.

This XML-formatted property list document is encoded in UTF-8, by default. When you turn your NSString into a property list element, encoding the "é" character replaces it with the UTF-8 Unicode character "\U00e9".

(by samvermetteAlex ReynoldsstefanBAlex Reynolds)

參考文件

  1. NSArray from URL encoding problem (CC BY-SA 3.0/4.0)

#character-encoding #cocoa #iphone






相關問題

android webview顯示windows-1250字符集html的問題 (Trouble with android webview displaying windows-1250 charset html)

SQL Server 2008:字符編碼 (SQL Server 2008 : Character encoding)

刪除不可打印的字符 (Removing non-printable character)

電子郵件客戶端如何讀取內容類型標頭進行編碼? (How does an email client read the content-type headers for encoding?)

帶有 iText 7 的 PDF 中的希臘字符 (Greek characters in PDF with iText 7)

如何在 C 字符串中的文本或字母中添加下標字符? (How to add a subscript character to text or a letter in a C string?)

來自 URL 編碼問題的 NSArray (NSArray from URL encoding problem)

網絡上有免費提供的 HTML URL 編碼功能嗎?(在 C 中實現) (Is there any HTML URL encoding function freely available on web?? (Implementation in C))

讀取未知編碼的文本行 (Reading lines of text in unknown encoding)

Python - 以 Python 可以使用的格式編碼外來字符的方法? (Python - Way to encode foreign characters in format Python can work with?)

決定 HTTP 標頭的字符集。我應該簡單地把 utf-8 和 fuggedaboutit 放在一起嗎? (Deciding charset for HTTP Headers. Should i simply put utf-8 and fuggedaboutit?)

如何在 python 中將原始 unicode 轉換為 utf8-unicode? (How to convert raw unicode to utf8-unicode in python?)







留言討論