6

Возможные дубликаты:
Пакетное преобразование файлов для кодирования или окончания строки под Windows
Как я могу преобразовать несколько файлов в кодировку UTF-8 с помощью инструментов командной строки * nix?

На моем компьютере с Windows есть файл php, который при переходе на * nix с winSCP не отображает символы правильно.

Я перетащил файл обратно с машины Linux в Windows и проверил кодировку с помощью Notepad++, и он говорит, что это ANSI.

Поэтому я попытался iconv -f ANSI -t utf-8 filename.php> filename.php, но получил ошибку, что преобразование ANSI не поддерживается. Я также попытался MS_ANSI, и я не получаю ошибку, но я также не получаю файл, показывающий правильную кодировку.

Я открываю файл с помощью winSCP, чтобы посмотреть, как он выглядит, и многие специальные символы отображаются как '?». Видя, что целью скрипта является удаление этих специальных символов из моих данных, это действительно вызывает некоторую проблему.

Есть ли другой инструмент для изменения кодировки? Я пробовал yum iconv, но не получил ответа.

Как бы вы конвертировали этот файл в правильную кодировку?

4 ответа4

5

У меня похожие проблемы с хэшами MD5, созданными в WindowsXP (под Cygwin), сохраненными в файл, а затем скопированными в систему Linux, где хеш-коды вычисляются для проверки копии. Если имя хешируемого файла содержит не-ASCII-символы, md5sum сообщает об отсутствии файла, потому что неправильно декодирует имя файла. Однако, если я открою текстовый файл, содержащий хэши в Блокноте, и поменяю кодировку с ANSI на UTF-8, Linux md5sum получит правильную кодировку.

ANSI на самом деле не является подходящей кодировкой (для всех, кроме Microsoft), поэтому iconv не подхватывает ее. Вместо этого вы можете выбрать windows-1252 , но нет гарантии, что он всегда будет работать:

iconv -f windows-1252 -t utf-8 filename.from > filename.to

Для справки , файл дает мне это в одном из этих текстовых файлов MD5:

$ file tequila.ansi.txt
tequila.ansi.txt: ISO-8859 text
1

Вы уверены, что "ANSI" - это правильная кодировка символов / имя ввода для iconv? Вы можете попробовать запустить «file filename.php», часто file сообщит (что он думает) о кодировке. Вы также можете попытаться не указывать кодировку from при выполнении преобразования или просто попробовать все из них:

for i in `iconv -l`; do iconv -f $i -t utf-8 filename.php > filename.php.$i; done
1

В Windows есть несколько кодировок, которые называются "ANSI". На самом деле, ANSI является неправильным. Iconv не может угадать, что вы хотите.

Кодировка ANSI - это кодировка, используемая функциями "A" в Windows API (функции "W" используют UTF-16). Какая кодировка соответствует, обычно зависит от языка вашей системы Windows. Наиболее распространенным является CP 1252 (также известный как Windows-1252). Итак, когда ваш редактор говорит ANSI, это означает «что бы API-функции не использовали в качестве кодировки ANSI по умолчанию», которая является кодировкой не-Unicode по умолчанию, используемой в вашей системе (и, следовательно, обычно такой, которая используется для текстовых файлов).

Итак, чтобы правильно преобразовать файл, вы должны сначала выяснить, какая кодировка "ANSI" для вашей системы Windows (или просто попросить ваш текстовый редактор сохранить ее, используя определенную кодировку).

1

Вы можете просто конвертировать его в UTF-8 с помощью Notepad++.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .