proudmore
@proudmore

Как построчно считать файл?

Вопрос явно идиотский, но я уже на краю.
Ситуация - есть csv файл весьма большого размера, в кодировке UTF-16LE.
Он располагается по url $link.
Мне нужно считать файл полностью и сохранить его в кодировке UTF-8. Проблема в том, что периодически, при перекодировании вылетает исключение:
Code: 8
Message: iconv(): Detected an incomplete multibyte character in input string

Такого нет только при использовании file_get_contents, но я не могу его использовать, т.к. файл в выделенный лимит оперативки явно не поместится.

BOM маркер я удалять пробовал, результата нет.
$source = fopen($link, 'r');
                        $target = fopen($dir . $pool->from, 'w');
                        while(!feof($source)){
                            $string = fgets($source);
                            $string = iconv('UTF-16LE', 'UTF-8', $string);
                            if(fwrite($target, $string) == false) {
                                $save = false;
                            }
                        }
                        fclose($source);
                        fclose($target);

Я почти в отчаянии, ткните носом в ошибку, пожалуйста, что только не перепробовал.

UPD. Файл не локальный.
  • Вопрос задан
  • 257 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
$in = fopen("a.txt", "r");
$out = fopen("p.txt", "w+");

$start = microtime(true);

while(($line = fgets($in)) !== false) {
    $converted = iconv('UTF-16LE', 'UTF-8', $line);
    fwrite($out, $converted);
}

$elapsed = microtime(true) - $start;
echo "<br>Iconv took $elapsed seconds\r\n";
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы