2013-01-18 64 views
3

我有一個iPhone應用程序,我在其中通過Web服務將UITextview中的文本發送到服務器。並在下一頁中顯示通過Web服務從服務器發送的評論列表。除了當我在UITextview中插入表情符號/表情時,一切都正常工作。從iPhone中的服務器檢索後Unicode字符更改

下一頁顯示方框而不是某些表情符(不是全部)。

我注意到:

  1. 工作:我從表情符號鍵盤插入一個表情符號在UITextview和日誌,\ u2601印刷它的代碼,並提交這個文本的服務器。在下一頁中我得到了相同的unicode \ u2601,它工作正常。它顯示我的表情符號圖標。

  2. 不工作:現在我已經插入UITextview其他的表情符號,從表情符號鍵盤並打印其代碼在日誌中,\ ud83d \ udc16,並提交這個文本的服務器。在下一頁中,我得到了一個與我發送的不同的unicode代碼:\ uf416。 iPhone無法識別這個unicode,所以它給了我一個方形盒子。

那麼這裏有什麼問題?只有當emoji字符有一對unicode代碼點時,它才能工作。

存儲註釋的數據庫是MySQL版本5.5。

從服務器檢索時,爲什麼表情符號字符代碼對發生變化?如何將檢索到的Unicode解碼爲原始格式,以便iPhone可以識別它?

+1

字符D800-DFFF是[surrogates](http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates)。 –

+0

你在MySQL中使用utf8mb4嗎? – Esailija

+0

是的,我在MySql中使用utf8mb4 – Nignesh

回答

0

Thanx Mar Byers,你給了我提示。我已經閱讀了什麼是Unicode平面,什麼是代理以及它是如何工作的。我發現這實際上沒有服務器問題,因爲我的SQL服務器版本是5.5,它具有字符集uyf8mb4,我已經在評論欄中使用了該設置。

現在我用我的應用程序來解碼從服務器的JSSON響應geting的SBJSON的問題。SBJSON解碼代理對(UTF16 UTF16)在一個Unicode UTF16,這就是爲什麼與代理對的表情符號不顯示。 Apple爲ios5及更高版本操作系統引入json庫NSJSONSerialization。我用這個庫來解碼json響應,我的代碼像魅力一樣工作。:)

我有解決方案從這裏

http://blog.manbolo.com/2011/12/12/supporting-ios-5-new-emoji-encoding

這裏

http://blog.manbolo.com/2012/10/29/supporting-new-emojis-on-ios-6

感謝名單給@Manbolo博客。

0

字符U + F416位於私人使用區域(PUA)之一。

很可能,從應用程序到數據庫的路上的一些代碼和後面用這個字符替換了表情符號。這可以是這種方式中的任何組件,例如用於與服務,Web服務,數據庫接口或數據庫本身進行通信的客戶端庫。嘗試單獨處理每個圖層,或者沿着圖層中的字符檢查它是否仍然正確。

相關問題