Я часто сталкиваюсь с текстовыми файлами (такими как файлы субтитров на моем родном языке, персидском ) с проблемами кодировки символов. Эти файлы создаются в Windows и сохраняются в неподходящей кодировке (кажется, ANSI), которая выглядит бессмысленной и нечитаемой, например:
В Windows это легко исправить, используя Notepad ++ для преобразования кодировки в UTF-8, как показано ниже:
И правильный читаемый результат выглядит так:
Я много искал подобное решение в GNU / Linux, но, к сожалению, предлагаемые решения (например, этот вопрос ) не работают. Больше всего, я видел , как люди предполагают , iconv
и , recode
но у меня не было никакой удачи с этими инструментами. Я протестировал много команд, включая следующие, и все они провалились:
$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt
Ничего из этого не сработало!
Я использую Ubuntu-14.04 и ищу простое решение (GUI или CLI), которое работает так же, как Notepad ++.
Одним из важных аспектов «простоты» является то, что пользователю не требуется определять исходную кодировку; скорее исходная кодировка должна автоматически обнаруживаться инструментом, и только целевая кодировка должна предоставляться пользователем. Но, тем не менее, я также буду рад узнать о работающем решении, которое требует предоставления исходной кодировки.
Если кому-то нужен тест-кейс для проверки различных решений, приведенный выше пример доступен по этой ссылке .
vim '+set fileencoding=utf-8' '+wq' file.txt
.iso-639
но этого, кажется, нет в наличииiconv
илиrecode
. По крайней мере, я не вижу этого в выводеiconv -l
.vim
но оно не сработало.Ответы:
Эти файлы Windows с персидским текстом кодируются в Windows-1256 . Таким образом, это может быть расшифровано командой, подобной опробованной OP, но с другими кодировками. А именно:
recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(денонсировано по жалобам оригинального автора; см. комментарии)
Предполагается, что для переменной среды LANG задан языковой стандарт UTF-8. Чтобы преобразовать в любую кодировку (UTF-8 или другую), независимо от текущей локали, можно сказать:
Оригинальный постер также путают с семантикой текстовых инструментов перекодирования (recode, iconv). Для исходной кодировки ( source
..
или -f) необходимо указать кодировку, с которой файл сохраняется (программой, которая его создала). Не некоторые (наивные) догадки, основанные на символах моджибаке в программах, которые пытаются (но не могут) прочитать его. Попытка или ISO-8859-15 или WINDOWS-1252 для персидского текста была явно тупиком: эти кодировки просто не содержат никаких персидских букв.источник
iconv
) сработала. Но первый (использующийrecode
) не работал должным образом, и результат все еще был бессмысленным. Отредактируйте свой ответ, включив в него толькоiconv
команду, и я отмечу его как ответ.iconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txt
что я тестировал и работал. Так что может быть хорошей идеей отредактировать вашу команду следующим образом.Помимо того
iconv
, что это очень полезный инструмент как сам по себе, так и в сценарии, есть очень простое решение, которое я нашел, пытаясь выяснить ту же проблему для греческих кодировок (Windows-1253 + ISO-8859-7).Все, что вам нужно сделать, это открыть текстовый файл в диалоговом окне «Открыть» Gedit, а не дважды щелкнув по нему . В нижней части диалогового окна есть раскрывающийся список «Кодирование», для которого установлено «Автоматически обнаружен» . Измените его на «Windows-125x» или другой подходящий кодовый набор, и текст будет отлично читаться в Gedit. Затем вы можете сохранить его, используя кодировку UTF-8, просто чтобы быть уверенным, что в будущем у вас больше не возникнет такой же проблемы ...
источник
В качестве дополнительного решения проблемы я подготовил полезный сценарий Bash, основанный на
iconv
команде из ответа Incnis Mrsi :Сохраните этот скрипт как
fix-encoding.sh
, дайте ему разрешение на выполнение с помощьюchmod +x fix-encoding.sh
и используйте его так:Этот скрипт попытается исправить кодировку любого количества файлов, которые он предоставляет в качестве входных данных. Обратите внимание, что файлы будут зафиксированы на месте, поэтому их содержимое будет перезаписано.
источник
Я не знаю, работает ли это с фарси: я использую Gedit, он выдает ошибку с неправильной кодировкой, и я могу выбрать то, что я хочу перевести на UTF-8, это был просто текст, не освещенный формат, но вот скриншот !
Извините, я наконец-то просмотрел свои текстовые файлы, и теперь они все конвертированы.
Я тоже любил блокнот ++, скучаю по нему до сих пор.
источник
Если вам нравится работать в GUI вместо CLI, как я:
источник
Я нашел работающее решение с помощью текстового редактора кода Microsoft Visual Studio, который является бесплатным и доступен для Linux.
Откройте файл, который вы хотите преобразовать в кодировку VS-Code. В нижней части окна есть несколько кнопок. Один из них связан с кодировкой файла, как показано ниже:
При нажатии на эту кнопку появляется всплывающее меню, которое включает в себя два элемента. В этом меню выберите «Открыть заново с кодированием», как показано ниже:
Это откроет другое меню, которое включает в себя список другой кодировки, как показано ниже. Теперь выберите «Арабский (Windows 1256)»:
Это исправит тарабарщину:
Теперь нажмите кнопку кодирования еще раз и на этот раз выберите опцию «Сохранить с кодированием», как показано ниже:
И в новом меню выберите опцию «UTF-8»:
Это сохранит исправленный файл с использованием кодировки UTF-8:
Выполнено!
:)
источник