2014-03-13 77 views
0

我做folloiwing步驟將數據導入到我的電子商務店:錯誤地顯示法文字符的UTF-8字符集。

  1. 轉換Excel表到CSV在Excel
  2. 在記事本++
  3. 打開CSV文件,並轉換爲UTF-8
  4. 導入CSV文件在phpmyadmin

如果我看網頁的前端法語字符顯示爲?該頁的字符集是utf-8

如果我將字符集更改爲iso-8859-1,則所有顯示都正確。

如果我檢查phpmyadmin中的項目,則重音顯示正確。

utf-8怎麼沒有正確顯示它們?我認爲它應該顯示é等

如果我去網站的後端和編輯產品,法語說明顯示在所見即所得的編輯器中正確。如果我保存該產品,則法語字符將正確顯示。但這是因爲所見即所得編輯器正在將字符轉換爲html實體。

回答

1

收集Unicode數據時的常見問題是將連接數據庫/表/列字符集配置爲ISO-8859-1,但插入的數據實際上是utf-8。數據庫基本上被告知,「這是一些8859-1編碼的數據,將它存儲在這個8859-1表中」。它不會進行任何轉換,因爲它沒有意識到數據不在8859-1中。所以數據是utf-8,但數據庫基本上被告知它在8859-1。

這是一個陰險的問題,因爲,如你所說,該數據庫將它們轉換錯誤如果你改變你的字符集爲UTF-8,因爲它會轉換爲「8859」的數據(remmember的databae 認爲它是8859-1)轉換爲utf-8 - 當然這種轉換失敗了,因爲數據確實在utf-8中。

所以基本上問題是,phpmyadmin是在8859-1,但你告訴它插入數據在8859-1,然後告訴它你提供數據在8859-1,然後給它的utf-8數據。數據庫認爲它是8859-1,所以解決這個問題的唯一簡單方法是:a)繼續使用8859-1,即使它不是,並且希望你永遠不必處理排序,搜索,整理等(可能會工作在你的情況下),或b)拔出數據爲8859-1(保留未轉換),然後在設置數據庫和連接到utf-8之後重新插入它,以便數據庫知道數據真的是什麼字符集是英寸

希望是有道理的。讓我知道如果它不。這是一個很難包圍你的頭。

+0

我想我讀了幾次後明白你的意思。我怎樣才能看到數據庫設置的字符集?我假設它是8859-1,但是當我轉到數據庫上的操作選項卡時,它顯示utf8_general_ci – Sackling

+0

不確定關於phpmyadmin,但一般情況下https://dev.mysql.com/doc/refman/5.5/en/charset.html可能有幫助。基本上,服務器有一個默認字符集,一個表有一個,一列可能有一個字符集,而一個連接也有一個字符集。因此,瞭解全局可能是必要的。如果你在phpmyadmin中檢查數據庫,你會看到phpmyadmin的設置,而不是你的應用程序 - 他們可能不同意。 'SHOW CREATE TABLE xxx'是查看錶xxx及其列的字符集的一種方法。 https://dev.mysql.com/doc/refman/5.5/en/charset-connection.html顯示服務器/ conn變量。 –

0

你可能會考慮用PHP打開你的csv(因爲你在你的標籤中提到它),並在使用查詢保存它們之前在字段上使用utf8_encode。