我結束了使用下面的代碼來檢測和轉換,如果必要的:
<?php
# Detect and convert to utf-8
$data = file_get_contents($file_full_path);
if(mb_detect_encoding($str,"UTF-8, ISO-8859-1, Windows-1252") != "UTF-8") {
$data = mb_convert_encoding($data, 'UTF-8', 'Windows-1252');
file_put_contents($file_full_path, $data);
}
但是,如果你知道文件的字符集,你加載你應該definetly使用MySQL命令去,因爲它在the documentation狀態:
由character_set_database系統 變量表示的字符集是用來解釋文件中的信息。 SET NAMES 和character_set_client的設置不會影響輸入的解釋 。如果輸入文件的內容使用 與默認值不同的字符集,則通常最好使用CHARACTER SET子句指定文件的 字符集,該子句從MySQL 5.1.17開始可用,其中 可用。字符集二進制的規定「沒有 轉換。」
用下面sintax:
LOAD DATA INFILE 'file_name' INTO TABLE tbl_name [CHARACTER SET charset_name]
什麼是文件的編碼? – bouscher
剛纔看到文件的編碼是ANSI。 –
如果你發現ANSI代表你的情況(它不是真正的編碼),你可以使用'set names XXXX'並讓MySQL進行轉換。但恕我直言,只需保存一份UTF-8的副本更爲簡單。 –