2016-03-13 158 views
0

我有一個腳本從utf8編碼的文本文件讀取數據。它用fgetc()逐個讀取字符。當它讀取簡單的ascii字符時很好,但是當涉及到š,č,ž......它無法正常工作。簡化的代碼如下所示:Readind utf8編碼的文本文件

$file = fopen($path); 
$char = fgetc($file); 
while($char !== false) { 
    $char = fgetc($file); 
    fwrite(STDOUT, $char); 
} 

我試圖用

header('Content-type: text/plain; charset=utf-8'); 

在腳本的開始,但它仍然無法正常工作。我也試過使用utf8_encode($char)utf8_decode($char),它沒有幫助。有沒有簡單的解決方案如何讀取utf8字符並將它們寫入輸出?

UPDATE:

的問題是,特殊字符保存在兩個指標,所以當我把一個龜etc我沒有得到整個字符。我現在的解決方案是,當我得到一個127以上的序號的字符時,我再次調用fgetc,並從fgetc的這兩個值中創建一個字符串,然後我可以正確地fwrite加載的特殊字符。也許這不是最好的解決方案,但我無法弄清楚什麼更好。

+0

什麼不正常? –

+0

問題是特殊字符被保存在兩個索引中,所以當我調用一個'fgetc'時,我沒有得到整個字符。我現在的解決方案是,當我得到一個127以上的序號的字符時,我再次調用'fgetc',並從'fgetc'中的這兩個值中創建一個字符串,然後我就可以正確'fwrite'加載特殊字符。也許這不是最好的解決方案,但我無法弄清楚什麼更好。 – sykatch

+0

請使用該信息更新您的問題。我有一個想法可以幫助你 –

回答

0

您是否已經在循環之前設置了$ char?

while($char !== false) 

否則你將永遠不會啓動while循環這可能是問題,因爲你永遠不會叫$char = fgetc($file);

+0

我忘了將它添加到示例中,感謝您的注意。 – sykatch

+0

好的,在這種情況下,爲什麼你不用file_get_contents作爲字符串讀取整個文件,並嘗試這裏給出的方法:http://stackoverflow.com/questions/2236668/file-get-contents-breaks-up -utf-8-characters –

+0

我正在尋找解決方案,我的腳本可以按照現在的工作方式工作 - 逐個閱讀字符,我不想加載整個文件。 – sykatch