я просто был сбит после того, как наш сервер был обновлен от Debian 4 to 5. Мы переключились на среду UTF-8, и теперь у нас есть проблемы при получении текста, распечатанного правильно на браузере, потому что все файлы находятся в non-utf8 кодировке как iso-8859-1, ASCII, и т.д.
Я попробовал много различных сценариев.
Первый, который я попробовал, является "iconv". Тот не работает, он изменяет содержание, но файлы enconding все еще non-utf8.
Та же проблема с enca, encamv, convmv и некоторыми другими инструментами, которые я установил через Кв. - добирается.
Тогда я нашел код Python, который использует chardet Универсальный модуль Детектора, для обнаружения кодирования файла (который хорошо работает), но использование unicode класса или класса кодека для сохранения его как utf-8 не работает ни без каких ошибок.
Единственным путем я нашел для получения файла, и его содержание, преобразованное в UTF-8, vi.
Это шаги, которые я делаю для одного файла:
vi filename.php
:set bomb
:set fileencoding=utf-8
:wq
Вот именно. Тот прекрасные работы. Но как может получить это выполнение с помощью сценария. Я хотел бы записать сценарий (оболочка Linux), который пересекает каталог, берущий все php файлы, затем преобразовывая их использующий vi с командами выше. Поскольку я должен запустить vi приложение, я не знаю, как сделать что-то вроде этого:
"vi --run-command=':set bomb, :set fileencoding=utf-8' filename.php"
Надежда кто-то может помочь мне.
Это самый простой из известных мне способов сделать это из командной строки:
vim +"argdo se bomb | se fileencoding=utf-8 | w" $(find . -type f -name *.php)
Или еще лучше, если ожидается, что количество файлов будет довольно большим:
find . -type f -name *.php | xargs vim +"argdo se bomb | se fileencoding=utf-8 | w"
Вы можете поместить свои команды в файл, назовем его script.vim
:
set bomb
set fileencoding=utf-8
wq
Затем вы вызываете Vim с помощью -S
(исходный код), чтобы выполнить сценарий для файла, который вы хотите исправить. Чтобы сделать это с кучей файлов, которые вы могли бы сделать
find . -type f -name "*.php" -exec vim -S script.vim {} \;
Вы также можете поместить команды Vim в командную строку, используя параметр +
, но я думаю, что это может быть более читабельным.
Примечание: я не тестировал это.