2012-10-19 57 views
0

雖然從csv文件中讀取複姓值,我看連字符被轉換成â€無法在CSV閱讀複姓值

我的CSV文件中包含的數據包括:

05‐30‐2012,user,500 
06‐30‐2012,user,1500 

看完後我得到的線路:

05â€30â€2012,user,500 
06â€30â€2012,user,1500 

爲什麼發生這種情況?我如何糾正它?

這是我做了什麼:提前

$lines = file('data.csv'); 

foreach($lines as $line_num => $line){ 
    if($line != ''){ 

    echo '<pre>'; 
    print_r($line);  
    echo '</pre>'; 
} 

感謝。

+2

什麼編碼是源文件? – Hamish

+0

這是一個奇怪的Unicode連字符'U + 2010'。您正在將其打印在拉丁文-1頁面中。 – mario

+0

這不是「編碼」它,它是「解釋」編碼值。這可能是一個'emdash'(某種)。 –

回答

0

如果您的輸出編碼不是UTF-8,那麼您需要將您的UTF-8輸入文件轉換爲您的輸出編碼。例如,假設您輸出到瀏覽器的輸出應該是ISO-8859-1(Apache設置的常見默認設置),那麼utf8_decode會將您的UTF-8 CSV數據轉換爲正確的編碼。

$lines = file('data.csv'); 

foreach($lines as $line_num => $line){ 
    if($line != ''){ 

    echo '<pre>'; 
    print_r(utf8_decode($line)); 
    echo '</pre>'; 
} 

如果你想UTF-8輸出(或者,如果你是罰款與),設置default_charset PHP設定在腳本中儘可能早,所以PHP將設置正確的HTTP標頭。

ini_set('default_charset','UTF-8');