2009-04-14 32 views
0

在PHP中有一個奇怪的問題。這裏有一個剝離下來的例子:在PHP中讀取重音字符的問題

$handle = fopen("file.txt", "r"); 
    while (($line = fgets($handle)) !== FALSE) { 
     echo $line; 
    } 
    fclose($handle); 

舉個例子,如果我有一個看起來像這樣的文件:

Lucien Frégis 

然後在命令行上面的代碼運行輸出相同的名稱,而是一封急的我得到:

Lucien FrÚgis 

望着我看到有問題的字節爲E9,這正是我所期望的爲電子急在PHP的默認編碼文件的十六進制轉儲(ISO-8859- 1),con通過輸出default_charset的當前值來確定。

有什麼想法?

編輯:

至於建議,我檢查窗口的代碼頁,顯然它的850,這是過時的(但不explane爲什麼正在顯示0xE9事情是這樣的......)

+0

我不知道如何設置(或設置),但什麼編碼是你的shell/OS /終端使用? – 2009-04-14 13:46:54

回答

2

0xE9是在iso-8859-1中編碼爲。這也是同一個角色的unicode代碼點。如果您的控制檯以不同的編碼解釋輸出(如cp-850),那麼相同的字節將轉換爲不同的編碼點,從而在屏幕上顯示不同的字符。如果你看看the code page for cp-850,你可以看到字節0xE9轉換爲(Unicode碼點0xDA)。所以基本上你的控制檯錯誤地解釋了字節。我不知道如何,但你應該改變你的控制檯字符集iso-8859-1。

-2

口音可能被認爲是unicode數據,你將不得不像這樣存儲它。看看utf_decode,utf_encodeiconv的功能。

不用等,它是在ISO 8859-1字符集。我不知道。你有沒有嘗試讀取二進制模式或使用file_get_contents