2012-11-01 191 views
0

此刻我有以下unicode字符串存儲在數據庫中。unicode字符顯示不正確

\ u4ece \ u4e0b \ u5468 \ u4e00 \ u8d77 \ uff0c \ u5947 \ u5f02

如果我把它通過PHP蘋果APNS服務器,它正確地顯示在iPhone的。 如果我不過想顯示在網站上的這些字符(中國字符),它並沒有在中國文字顯示出來,但純粹作爲\ u4ece \ u4e0b \ u5468 \ u4e00 \ u8d77 \ uff0c \ u5947 \ u5f02

誰都可以幫助我如何正確顯示它們?

+1

您需要添加更多的細節。你如何輸出你的網站上的字符,你的網站使用什麼編碼... –

回答

3

這不是「Unicode」,那些是Unicode轉義序列。這:「下」是一個Unicode字符。這:「\ u4e0b」是字符串「反四字ee零蜂」。 如果您將該轉義序列完全像JSON那樣放入JSON中,則在解碼JSON時它恰好會解析爲正確的字符。這是因爲該轉義序列恰好在JSON中使用。這暗示了另一個問題,但是,您正在手動創建JSON:

$apns = "{\"message\":\"$unicodeEscape\"}"; 

不這樣做。在做出選擇和JSON編碼它的編程語言的本機陣列:

$apns = json_encode(array('message' => '從下週一起,奇異')); 

如果你目前應該這樣做,字符串將顯示爲「\ u4ece ......」在iPhone上爲好,因爲字符串內容會正確得到JSON轉義以保留其原始內容。

對於HTML來說,那些轉義序列並不代表什麼特別的東西,它們當然不代表中文字符。

存儲實際數據庫中的中文字符以例如UTF-8編碼,而不是僅在特定上下文中相關的轉義序列。

我建議您閱讀關於http://kunststube.net的大多數文章以獲取更多詳細信息。


因爲他們顯然JSON逃脫,最簡單的方法將其轉換回從他們目前應該向他們解析爲JSON是格式:

$string = json_decode("\"$string\""); 

這隻能如果字符串不包含會導致JSON語法無效的任何內容,如"。否則,你可以改編this solution


(該字符串也由「Unicode字符」,因爲每個字符都可以通過統一表示。)

+0

感謝deceze,但我已經有以這種方式存儲在DB中的字符,並且系統是活的。我不想改變數據庫中的數據(這會造成一個大混亂和更多的問題)。我有沒有辦法將這些角色轉換回unicode? – HansStam

+0

嘗試更新。 – deceze