2011-03-27 88 views
0

我在將字符串轉換爲可讀的問題時遇到了問題。我使用NSString unicode編碼問題

NSString *substring = [NSString stringWithUTF8String:[symbol.data cStringUsingEncoding:NSUTF8StringEncoding]]; 

,但我不能轉換\ U7ab6 \ U51b1成「

它顯示爲窶冱這是我不想要的東西,它應該顯示爲」。誰能幫我?

+0

?字符U + 7AB6是窶,U + 51B1絕對是冱。那個序列如何代表撇號? – bobince 2011-03-27 11:33:41

+0

嗨bobine,它不是一個撇號,但看起來像一個。我從一個word文檔粘貼到這裏,第一個是撇號'它被顯示爲'並且由\ U7ab6 \ U51b1的組合創建。我只是希望它顯示爲' – munchine 2011-03-27 23:18:08

回答

3

它被示出爲」

這是字符U + 2019右單引號。

發生了什麼事是你已經提交給你,在UTF-8編碼的字符序列’s,其散發出來的字節:

’   s 
E2 80 99 73 

該字節序列的話,不正確,被解釋就好像它是在Windows代碼頁932進行編碼(日語;或多或少移位-JIS):

E2 80 99 73 
窶  冱 

因此,在這一個特定情況下,可以通過首先將編碼字符轉換成CP932字節恢復’s串,然後裝飾將這些字節轉換回使用UTF-8的字符。

但是,這並不能解決您的真正問題,即首先錯誤地讀取了字符串。在這種情況下,您得到了窶冱,因爲編碼爲’s的UTF-8字節序列也是有效的Shift-JIS字節序列。但是,對於所有可能的UTF-8字節序列,情況並非如此。許多其他角色將無法修復。

您需要找到正在讀入系統的字節並將其解碼爲Shift-JIS,並修改爲使用UTF-8。