Я часто сталкиваюсь с текстовыми файлами (такими как файлы субтитров на моем родном языке, персидский ) с проблемами кодировки символов. Эти файлы создаются в Windows и сохраняются в неподходящей кодировке (кажется, ANSI), которая выглядит бессмысленной и нечитаемой, например:
В Windows, это можно легко исправить, используя Notepad ++ для преобразования кодировки в UTF-8, как показано ниже:
И правильный читаемый результат похож на this:
Я много искал подобное решение для 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 ++.
Одним важным аспектом «простоты» является то, что пользователю не требуется определять исходную кодировку; скорее исходная кодировка должна автоматически обнаруживаться инструментом, и только целевая кодировка должна предоставляться пользователем. Но, тем не менее, я также буду рад узнать о работающем решении, которое требует предоставления исходной кодировки.
Если кому-то нужен тест-кейс для проверки различных решений, приведенный выше пример доступен по этой ссылке .
Рабочее решение, которое я нашел, использует Код Microsoft Visual Studio текстовый редактор, который является Бесплатным программным обеспечением и доступный для Linux.
Открывают файл, Вы хотите преобразовать его кодирование в VS Code. У основания окна существует несколько кнопок. Один из них связан с кодированием файла, как показано ниже:
Нажатие этой кнопки открывается служебное меню, которое включает два объекта. Из этого меню выбирают опцию "Reopen with Encoding", точно так же, как ниже:
Это откроет другое меню, которое включает список другого кодирования, как показано ниже. Теперь выберите "арабский язык (Windows 1256)":
Это исправит текст мусора как это:
Теперь нажимают кнопку кодирования снова и на этот раз выбирают опцию "Save with Encoding", так же, как ниже:
И в новом меню выбирают опцию "UTF-8":
Это сохранит исправленный файл с помощью кодировки UTF-8:
Сделанный! :)
Я не знаю, работает ли это с фарси: Я использую Gedit, он дает отказ с неправильным кодированием, и я могу, выбрал то, что я хочу перевести в UTF-8, это было просто текстом не освещенный формат, но здесь является снимком экрана!
Жаль я наконец прошел через свои текстовые файлы, поэтому теперь они все преобразовываются.
я любил блокнот ++ также, пропустите его все еще.
Как дополнительное решение проблемы, я подготовил полезный сценарий Bash на основе эти iconv
команда от ответ Incnis Mrsi :
#!/bin/bash
if [ $# -lt 1 ]
then
echo 'Specify at least one file to fix.'
exit 1
fi
# Temp file to store conversion attempt(s).
tmp='tmp.fixed'
for file in "$@"
do
# Try to fix the file encoding.
if iconv -f WINDOWS-1256 "$file" -t UTF-8 > $tmp; then
echo "Fixed: '$file'"
cat $tmp > "$file"
else
echo "Failed to fix: '$file'"
fi
done
rm $tmp
Сохраняют этот сценарий как fix-encoding.sh
, дают его, выполняют разрешение с помощью chmod +x fix-encoding.sh
и используют его как это:
./fix-encoding.sh myfile.txt my2ndfile.srt my3rdfile.sub
Этот сценарий попытается зафиксировать кодирование любого количества файлов, которые это обеспечивается, как введено. Обратите внимание, что файлы будут зафиксированы оперативные, таким образом, содержание будет перезаписано.
Эти файлы Windows с персидским текстом кодируются в Windows 1256. Таким образом, это может быть дешифровано командой, подобной OP, которую попробовали, но с различными наборами символов. А именно:
recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(осужденный на жалобы исходного плаката; см. комментарии),
iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt
Этот предполагает, что переменная среды ЛЕНГА установлена на локаль UTF-8. Для преобразования в любое кодирование (UTF-8 или иначе), независимо от текущей локали, можно сказать:
iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}
Исходный плакат также перепутан с семантическими из текстовых инструментов перекодирования (перекод, iconv). Для исходного кодирования (источник..
или-f) нужно указать кодирование, с которым сохранен файл (программой, которая создала его). Не некоторые (наивные) предположения на основе mojibake символов в программах, которые пытаются (но сбой) считать его. Попытка или ISO-8859-15 или WINDOWS 1252 для персидского текста была, очевидно, тупиком: эта кодировка просто не содержит персидской буквы.
Кроме iconv
, который является очень полезным инструментом или самостоятельно или в сценарии, существует действительно простое решение, я нашел попытку выяснить ту же проблему для греческих наборов символов (Windows 1253 + ISO-8859-7).
Все, что необходимо сделать, должно открыть текстовый файл через "Открытое" диалоговое окно Gedit и не путем двойного щелчка по нему . У основания диалогового окна существует выпадающее для Кодирования, которое установлено на "Автоматически Обнаруженный" . Измените его на "Windows-125x" или другой подходящий кодовый набор, и текст будет совершенно читаем в Gedit. Можно затем сохранить его с помощью кодировки UTF-8, только чтобы быть уверенными, что у Вас не будет той же проблемы снова в будущем...
Если Вам нравится работать в GUI вместо CLI, как я делаю:
Я понял это в манджаро с gaupol и работает отлично, но вы должны делать это один за другим и не иметь пакетного режима
https://github.com/otsaloma/gaupol https:// pkgs.org/download/gaupol
Просто откройте файл (независимо от исходной кодировки) Сохранить как (Shift + Ctrl + S) В открывшемся окне измените кодировку на UTF-8. Нажмите Сохранить и готово