Преобразование файла в iso-8859-1 (нормально для utf-8, но не работает с файлами us-ascii)

У меня есть репозиторий git, файлы html, js, php в основном закодированы в UTF-8. Все они должны быть закодированы в UTF-8, но выполнение file -i * показывает, что большинство из них - UTF-8, но некоторые из них такие:

file.html.twig: текст / простой; кодировка = us-ascii

Кроме того, если я открою эти файлы с помощью Sublime text, он покажет UTF-8. И если я выполню это преобразование:

iconv -f us-ascii -t iso-8859-1 file.html.twig -o file2.html.twig

or

iconv -f utf-8 -t iso-8859-1 file.html.twig -o file2.html.twig

Ничего не меняется, но если я выполню эту команду поверх файла utf-8, преобразование будет выполнено.

Почему так происходит? Я знаю, что us-ascii является подмножеством utf-8, но iconv, похоже, не может изменить эту кодировку.

(Моя конечная цель - поддерживать репозиторий git с файлами в iso-8859-1, и git, похоже, не распознает кодировку файлов, это будет вторая проблема, сначала мне нужно ее решить ...)

Спасибо


person K. Weber    schedule 22.11.2017    source источник
comment
Можете ли вы показать шестнадцатеричный дамп проблемной последовательности символов?   -  person choroba    schedule 22.11.2017
comment
Проблема в самой кодировке файла, контент в порядке, мне нужен весь мой исходный код в ISO-8859-1 (я знаю, что это не мудрое решение, но этот код сосуществует с устаревшим приложением для бедствий, и у меня есть нет выбора)   -  person K. Weber    schedule 22.11.2017


Ответы (1)


Если они в кодировке UTF-8, не позволяйте догадывающемуся, например file, ввести вас в заблуждение. Он дает один ответ, тогда как он может дать много; всякий раз, когда он угадывает ASCII, он также может включать UTF-8, iso-8859-1 и десятки других.

Итак, возьмите все ваши файлы UTF-8 и преобразуйте их в iso-8859-1. Но поймите, что это может быть преобразование с потерями, поэтому не переопределяйте поведение iconv по умолчанию, сообщающее вам об этом с ошибкой.

О, но вы конвертируете файлы, которые могут иметь внутренние объявления своей кодировки (например, HTML и XML), вам следует обновить их объявления.

И, если есть ошибки, вы обычно можете изменить содержимое на другое представление символов, не поддерживаемых iso-8859-1, в соответствии с любым языком (???? => \ uD83D \ uDEB2 или аналогичным) или правилами разметки (???? = > ????) применяются.

person Tom Blodget    schedule 22.11.2017
comment
Я не очень хорошо понимаю этот бит: Но я понимаю, что это может быть преобразование с потерями, поэтому не переопределяйте поведение iconv по умолчанию, сообщающее вам об этом с ошибкой. остальное я понимаю, и Я конвертирую пакетным способом в iso-8859-1. Спасибо - person K. Weber; 23.11.2017
comment
Сделал это, были проблемы только с символом евро (€), даже если я использую iso-8859-15, который должен иметь символ евро, просто замена его на € выполняет свою работу - person K. Weber; 23.11.2017
comment
iconv 1.11 конвертирует e2 82 ac в a4, как я и ожидал. Что касается ошибок, вы можете указать iconv игнорировать некоторую потерю данных, добавив // IGNORE к tocode, но я никогда не хотел такого поведения. - person Tom Blodget; 23.11.2017