2012-09-19 41 views
2

我用fputcsv創建csv文件。我想要csv文件在windows1251 ecnding。但找不到解決方案。我怎樣才能做到這一點? 乾杯PHP fputcsv編碼

回答

8

excel文件的默認編碼是機器特定的ANSI,主要是windows1252。但是由於您正在創建該文件並可能插入UTF-8字符,因此該文件無法正常處理。

創建文件時可以使用iconv()。例如:

function encodeCSV(&$value, $key){ 
    $value = iconv('UTF-8', 'Windows-1252', $value); 
} 
array_walk($values, 'encodeCSV'); 
+1

當我用這個方法我有這樣的錯誤:的iconv():檢測到非法的字符輸入字符串 –

+0

*「爲CSV文件默認的編碼是windows1251」 * ...?!?!誰設置了這個默認值? – deceze

+2

剛剛醒來:),windows1252爲EN-US –

4

該文件將在任何編碼你的字符串在PHP字符串是原始字節數組,其編碼取決於地方的字節是從哪裏來的。如果您只是從源代碼文件中讀取它們,那麼它們就會保存在您的源代碼中。如果它們來自數據庫,則它們處於數據庫連接設置的任何編碼狀態。

如果你需要從一種編碼轉換爲另一種,使用iconv。如果您需要更深入的信息,請瀏覽:

+0

如果我選擇編碼的「,」和「 「用於CSV文件的編碼方式不同,如UTF-16? – rjmunro

+0

然後提供UTF-16編碼的''''和','爲'fputcsv'作爲參數。 (雖然實際上沒有嘗試過,但會是我的第一次嘗試。) – deceze

7

它的工作:享受
使用此fputcsv前:

$line = array_map("utf8_decode", $line); 
1
fputs($fp, $bom = chr(0xEF) . chr(0xBB) . chr(0xBF)); 

試試它爲我工作!