2013-05-10 122 views
3

我有json數據。有「西里爾」字符串JSON文件,像這樣的:如何轉換json數據?

\u0418\u0432\u0430\u043D\u043E\u0432 \u0418. 

當我解碼JSON,放在數據庫表中這個數據我得到

Иванов И. 

one decoding web-site我進入這個字符串的字符串得到了很好的(一個我需要)

Иванов И. 

而且也是這個網站告訴我,這是從CP1252轉換爲UTF-8。 所以我試圖解碼使用手動

mb_convert_encoding ($string, "UTF-8","windows-1252"); 
mb_convert_encoding ($string, "UTF-8","CP1252"); 

iconv("windows-1252","UTF-8",$string); 
iconv("CP1252","UTF-8",$string); 

任何的這種功能所做的數據庫表中的字符串看起來像

Øòðýþò ÃËœ. 

後數據從JSON轉換
Øòðýþò Ø. 

兩者都沒有在上面的網站上正確解碼。所以問題是,我該如何轉換這個字符串?

UPD:使用該SQL請求:

ALTER DATABASE logenterprise 
    CHARACTER SET utf8 

,上面寫的相同的東西后嘗試 - 結果是相同的。 也試過這種以防萬一:

alter table mytable convert to CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
+0

它可能與你的表設置的字符集有關。驗證表本身是否有分配給它的字符集可以表示這些字符。 – Orangepill 2013-05-10 16:20:28

+0

我的數據庫位於utf8_general_ci – user1956641 2013-05-10 16:27:15

+0

排序規則與表和列字符集不一樣。 – Evert 2013-05-10 17:29:51

回答

1

詛咒你們這些該死的^^ 他們給了我一個很難得的編碼。

一切看起來很好(數據庫,輸入數據和網站的編碼),但我仍然在我的表中有神祕的字符。那麼問題是什麼呢?這是連接到您的數據庫服務器。

幸運的是,你可以通過一個簡單的查詢來解決這個問題。

建立MySQL的連接,你需要執行下面的查詢:

mysql_query("SET NAMES 'utf8'"); 

瞧。當你執行你的INSERT-Query時,數據會很好地保存在你的數據庫中。

當我處理'變音符號'和''符號時,這多次救了我的屁股。


注:你不應該使用mysql_xxx方法了,因爲他們已被棄用。我只是在示例中使用它們來使代碼更清晰。

+0

謝謝,在我的application.ini中添加了一個字符串: 'resources.db.params.charset = utf8'(answer provided [here](http://stackoverflow.com/questions/584676/how-to-make-pdo-run-set-names-utf8-each-time- I-連接功能於zendframework)) – user1956641 2013-05-10 23:20:09