2014-03-04 92 views
1

我有編碼一個奇怪的問題我String的Xcode - UTF-8編碼字符串

例如:

NSString *str = @"\u0e09\u0e31\u0e19\u0e23\u0e31\u0e01\u0e04\u0e38\u0e13"; 
NSString *utf = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSLog("utf: %@", utf); 

這在日誌

utf: ฉันรักคุณ 

完美的工作,但,當我嘗試使用我的字符串,我從JSON解析與相同的字符串:

//str is string parse from JSON 
NSString *str = [spaces stringByReplacingOccurrencesOfString:@"U" withString:@"u"]; 
NSLog("str: %@, str); 
NSString *utf = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSLog("utf: %@", utf); 

這並沒有在日誌

str: \u0e09\u0e31\u0e19\u0e23\u0e31\u0e01\u0e04\u0e38\u0e13 
utf: \u0e09\u0e31\u0e19\u0e23\u0e31\u0e01\u0e04\u0e38\u0e13 

我一直在尋找了幾個小時的答案,但工作仍然沒有任何線索

任何將非常感謝!謝謝!

+0

你嘗試'[海峽UTF8字符串]''之前* NSString的UTF = [STR stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]'? –

+0

粘貼創建空格的代碼 –

+0

@HimanshuJoshi是的,我有。沒有工作:/ – user3378387

回答

2

由JSON返回的字符串實際上是不同的 - 它包含轉義反斜槓(每個「\」你看到打印出來的JSON字符串時,它實際上包含了爲@「\」)。

相比之下,您手動創建的字符串從頭開始已包含「ฉันรักคุณ」。您不要插入反斜槓字符 - 相反,@「\ u0e09」(et。al。)是一個單一的代碼點。

你可以用下面這行

NSString *utf = str; 

和你的榜樣輸出不會改變替換此行

NSString *utf = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

。 stringByReplacingPercentEscapesUsingEncoding:引用了一種不同類型的轉義。 See here about percent encoding

你需要實際做的是解析unicode代碼點的字符串表示形式的字符串。以下是一個潛在解決方案的鏈接:Using Objective C/Cocoa to unescape unicode characters。不過,我建議您查看您使用的JSON庫(如果您使用的是JSON庫) - 他們可能會提供某種方式來透明地處理這個問題。例如。 JSONkit呢。

+0

你的第二個鏈接工作完美!謝謝!你救了我的命! – user3378387

+0

你好我有&在我的圖片網址,所以如果我通過服務服務器把它作爲新的參數,所以如何解決它。你能告訴我嗎?謝謝@janis K –