2013-05-02 20 views
1

我們每天從客戶端上傳一個CSV文件,他們說這些文件是UTF16-LE編碼的。然而,當我在CSV文件的每一行運行iconv('UTF16-LE', 'UTF8'),它進入數據庫的時候是這樣的:處理PHP/MySQL導入的奇怪編碼

ZAA0737

IE,還有一那些[?]在每個角色之間的東西。

我試過utf8_encode和iconv和不同編碼類型的各種組合,以便讓它消失。有沒有人有這方面的經驗,以及如何將未知或不支持的編碼轉換爲UTF8,或者至少可以通過PHP和MySQL讀取?

+0

你是通過命令行還是使用PHP運行'iconv'?字符串在插入數據庫之前是什麼樣子的? – Mike 2013-05-02 19:17:37

回答

2

UTF16中的一半字符不能轉換爲UTF8。 UTF16需要增加8位。

UTF16將每個字符串編碼爲LE或BE。只是爲了好玩,你可以嘗試從UTF16轉換爲UTF8(沒有'-LE')。這會告訴你,如果你的客戶對你說謊了。但最有可能的情況是數據不合適。

一種解決方案是將它作爲字節數組(BINARY(x))存儲在數據庫中,而不是作爲文本。

+0

即使一半的字符無法轉換,這些字符中的任何字符實際上在字符串中使用的可能性有多大? – Mike 2013-05-02 19:16:19

+0

除了字符範圍之外什麼都不知道 - 50% – mbarlocker 2013-05-02 19:17:07

+0

所以基本上如果我們的數據庫是UTF8,那麼我們不能以字符串格式存儲一個UTF16編碼的字符串(即它只能以二進制格式)? – jraede 2013-05-02 19:18:18