2017-02-18 144 views
1

我有一個文件,其中包含一些西里爾文字符。當我在Notepad ++中打開這個文件時,我看到它具有ANSI編碼。如果我使用Notepad ++手動將其編碼爲UTF-8,那麼一切都完好無損 - 我可以在解析器中使用此文件並獲取結果。但我想要的是以編程方式使用PHP。這是我尋遍SO和文件之後嘗試:無法將文件從ANSI轉換爲UTF-8,使用PHP

file_put_contents($file, utf8_encode(file_get_contents($file))); 

在這種情況下,當我的算法解析生成的文件,它符合這樣的字母「E」,「I」,「A」。換句話說,在這種情況下,我得到一些垃圾。我也試過這個:

file_put_contents($file, iconv('WINDOWS-1252', 'UTF-8', file_get_contents($file))); 

但它產生了非常相同的垃圾。所以,我真的想知道如何以編程方式記住Notepad ++的功能。謝謝!

+0

當你通過mb_detect_encoding($ contents,'auto',true)運行你的文件內容時,你會得到什麼? – Graham

+0

@格拉漢姆。等一下。我會檢查它 – Jacobian

+0

看來我得到一個空字符串。可能,mb_detect_encoding沒有檢測到任何東西 – Jacobian

回答

2

Notepad ++可能會將您的編碼報告爲ANSI,但這不一定等同於Windows-1252。 1252是拉丁字母的編碼,而1251是用於編碼西裏爾字母。因此,使用

file_put_contents($file, iconv('WINDOWS-1251', 'UTF-8', file_get_contents($file))); 

使用iconv從1251轉換爲utf-8。