Как преобразовать кодировку, отличную от UTF-8, в более читаемую кодировку / UTF-8 в PHP?

Я использую «PDF Parser» в проекте Laravel 5.4, чтобы получить содержимое файла pdf. Но когда я сбрасываю содержимое, я получаю закодированный текст, который при наведении курсора читает «5868 двоичных символов или символов, отличных от UTF-8».

Это код, который должен читать содержимое файла.

$file = $request->file('file');
$parser = new \Smalot\PdfParser\Parser();
$pdf    = $parser->parseFile($file);
$scannedText = $pdf->getText();
dd($scannedText);

который сбрасывает что-то вроде этого:

x00i\x00n\x00g\x00ª\x00t\x00h\x00i

Функция PHP mb_detect_encoding() возвращает false, когда "тип кодирования" установлен на "авто". utf8_encode() тоже не работает, поэтому я знаю, что это не кодировка ISO-8859-1.

Вот где я застрял. Любая помощь приветствуется.

Загрузите необработанные байты в шестнадцатеричный / текстовый редактор и выберите разные кодировки для интерпретации содержимого, пока не найдете кодировку, в которой текст выглядит правильно. Если каждый второй байт - 00, возможно, вы просматриваете текст в кодировке UTF-16.

deceze 23.05.2018 13:33

Это сложно. Вы не можете преобразовать кодировку, пока не узнаете исходную кодировку. Я бы посмотрел, смогу ли я извлечь информацию о кодировке из самого исходного файла PDF. Возможно, используемая вами библиотека абстракций, Smalot\PdfParser\Parser, сможет предоставить эту информацию? В противном случае вам нужно будет посмотреть другие решения для синтаксического анализа PDF. Это интересная проблема - держите нас в курсе вашего возможного решения! :)

kieranpotts 23.05.2018 13:35

Спасибо за быстрый ответ, ребята. @kieranpotts Я проверил файл pdf, шрифты в кодировке Identity-H. Кроме того, когда я использую встроенную файловую систему Laravel для получения содержимого (вместо пакета PdfParser), а затем выгружаю содержимое, отображается некоторый нечитаемый текст, но теперь кодировка кажется другой. Итак, я делаю mb_detect_encoding и получаю «UTF - 8». На этот раз я считаю, что проблема заключается в попытке сбросить содержимое файла. Поправьте меня если я ошибаюсь.

Karan Singh 23.05.2018 14:29

@deceze, это хорошая мысль. Но я ищу более простое программное решение, которое я могу кодировать. Хотя спасибо ... Очень признателен.

Karan Singh 23.05.2018 17:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
1 084
1

Ответы 1

В моем проекте я получил аналогичную ошибку с «PDF Parser».

Но у меня больше не было этой ошибки, используя: https://github.com/spatie/pdf-to-text.

Вы можете использовать композитор для его установки:

composer require spatie/pdf-to-text

А работает это так:

use Spatie\PdfToText\Pdf;

$pdf = (new Pdf())->setPdf('sample.pdf');

$pdf->setOptions(['layout']);

dump($pdf->text());

Я работал над этим проектом около года назад и помню, как после некоторой борьбы с PDF Parser я переключился на PdfToText, и это сработало отлично. Но забыл разместить это здесь. В любом случае, спасибо за ваш ответ.

Karan Singh 18.03.2019 17:12

Другие вопросы по теме