2011-07-26 107 views
0

我試過: file_put_contents($ file_name,utf8_encode($ data)); 但是,當我檢查文件編碼從外殼與Linux命令:'file file_name' 我得到:'file_name:ASCII文本'如何在PHP中將ASCII編碼的字符串轉換爲UTF8?

這是否意味着utf8_encoding沒有工作?如果是這樣,從ASCII轉換爲UTF8的正確方法是什麼

回答

1

如果你的字符串不包含任何非ASCII字符,那麼你可能不會看到差異,因爲UTF-8向後兼容ASCII。嘗試寫作,例如,文本「1000さくら」,看看會發生什麼。

+0

+1,即得。使用'file'工具將UTF-8中僅ASCII字符檢測爲ASCII。 – 2011-07-26 13:58:41

+0

我的字符串包含日文字符 –

1

請注意,utf8_encode僅將編碼爲 ISO-8859-1的字符串轉換爲UTF-8。更合適的名稱是 「iso88591_to_utf8」。如果你的文本沒有在ISO-8859-1中編碼,那麼你不需要這個功能 。如果你的文本已經是UTF-8,你不需要 需要這個功能。實際上,將這個函數應用於未在ISO-8859-1中編碼的文本 將很可能簡單地篡改文本。

如果您需要將文本從任何編碼轉換爲任何其他編碼,請改爲使用iconv()。

參見http://php.net/manual/en/function.utf8-encode.php

1

ASCII是UTF-8的一個子集,因此,如果一個文件是ASCII然後它已經是UTF-8

實測值在:Convert ASCII TO UTF-8 Encoding

+0

我的字符串包含日文字符 –

+0

然後使用iconv。有一個例子。 – akond

0

試試這個:

$data = mb_convert_encoding($data, 'UTF-8', 'ASCII'); 
file_put_contents ($file_name, $data); 

或使用該選項可以更改文件編碼:

$fd = fopen($file, 'r'); 
stream_filter_append($fd, 'convert.iconv.UTF-8/ASCII'); 
stream_copy_to_stream($fd, fopen($output, 'w')); 

參考:How to write file in UTF-8 format?