文件中的file_get_contents包含西里尔字符和未定义的编码

时间:2014-04-09 13:01:11

标签: php unicode file-get-contents

我无法从具有未知编码的.txt文件中获取php中的西里尔字符。我尝试了几乎所有我能在网上找到的东西。我需要使用什么PHP函数获取此文件的内容?

https://www.dropbox.com/s/w7cex4wiogyytvm/100004-6.txt

修改

输入:

    $path = WWW_ROOT . 'files' . DS . '100002-6.txt';
    $string = file_get_contents($path);
    debug($string);

输出:调试被破坏,如果我尝试将值保存到数据库则失败(BOM有些麻烦,无法保存值)。

输入

    $path = WWW_ROOT . 'files' . DS . '100002-6.txt';
    $string = file_get_contents($path);
    $string = mb_convert_encoding ($string , 'utf-8');
    debug($string);

输出:

    '????? ???:300/500V
    ???? ???:2000V
    ????? ???? ??????: ? +70??
    ?? ??? ?? (????? 5 ??.): ? +160??
    ????? ?????? ?? ?????: ? +5??   '

输入:

    $path = WWW_ROOT . 'files' . DS . '100002-6.txt';
    $string = file_get_contents($path);
    $string = iconv("UTF-16", "UTF-8//TRANSLIT//IGNORE", $string);
    debug($string);

输出:

췮㌰〯㔰ざഊ죱㈰〰嘍્⃰⃲㨠‫㜰냑ഊ쿰⃱밠⣭㔠⤺⃤⬱㘰냑ഊ췠볭

输入:

    $path = WWW_ROOT . 'files' . DS . '100002-6.txt';
    $string = file_get_contents($path);
    $string = iconv("ISO-8859-5", "UTF-8//TRANSLIT//IGNORE", $string);
    debug($string);

输出:

    Эюьшэрыхэ эряюэ:300/500V
    Шёяшђхэ эряюэ:2000V
    ЭрМтшёюър №рсюђэр ђхьях№рђѓ№р: фю +70Аб
    Я№ш ъ№рђюъ ёяюМ (эрМьэюуѓ 5 ёхъ.): фю +160Аб
    ЭрМэшёър ђхьях№рђѓ№р я№ш шэёђрырішМр: фю +5Аб

现在我测试了多个文件,我认为输入文件不再是Unicode编码了。我成功地阅读了我的测试文件,但重要的是(并且我不知道编码)仍然没有。所以我改变了问题,编码似乎仍未定义。

清理更多一点。我可以打开这个文件,并在记事本中正常查看。它包含导致此问题的西里尔字符。

1 个答案:

答案 0 :(得分:2)

该文件编码在CP1251 a.k.a. MS-CYRL a.k.a。" Cyrillic(Windows)"。

$string = file_get_contents($path);
$string = iconv('CP1251', 'UTF-8', $string);

我是怎么想出来的?在文本编辑器中打开文件并尝试了一些相关的编码,直到它看起来正确。如果文件编码未知,那么你几乎无能为力。