преобразование кодовых точек юникода в строку во всем файле - PullRequest
0 голосов
/ 16 февраля 2019

Я запускаю веб-приложение PHP, которое принимает файл от пользователя, добавляет к нему некоторые данные и предоставляет пользователю новые файлы для загрузки.

Иногда я получаю файлы, которые содержат невидимые управляющие символы, такие как BOM, ноль-width-no-break-space и т. д. в нем (в текстовом редакторе он не отображается, но при проверке с помощью команды ' less ' или в редакторе ' vi ' он показывает,,и т. д.) и это вызывает проблемы с нашей обработкой.В настоящее время у меня есть список нескольких таких кодовых точек, которые я удаляю из файла, используя sed перед обработкой (ниже приведена команда, которую я использую).Затем я также использую «iconv» для преобразования не-utf файлов в utf-8.

exec("sed -i 's/\xE2\x80\x8F|\xC2\x81|\xE2\x80\x8B|\xE2\x80\x8E|\xEF\xBB\xBF|\xC2\xAD|\xC2\x89|\xC2\x83|\xC2\x87|\xC2\x82//g' 'my_file_path'");

Но список таких символов увеличивается, и если их не обрабатывать должным образом, такие символы вызывают кодировку файлов 'unknown-8bit ', который не является правильным и покажет поврежденный контент.Теперь мне нужно решение, которое должно быть эффективным и не требует от меня поиска таблицы кодов.

Как мне это сделать, чтобы он автоматически обрабатывал каждую кодовую точку в файле и не нуждался в поддержкесписок такого кода для замены.Я также открыт для решения сценариев Perl / python / bash.

PS Мне нужно поддерживать все языки (не только US ASCII или расширенный ASCII), и я также не хочу потери данных.

...