Преобразовать кодировку текстового файла

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

enter image description here

В Windows, это можно легко исправить, используя Notepad ++ для преобразования кодировки в UTF-8, как показано ниже:

enter image description here

И правильный читаемый результат похож на this:

enter image description here

Я много искал подобное решение для 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 ++.

Одним важным аспектом «простоты» является то, что пользователю не требуется определять исходную кодировку; скорее исходная кодировка должна автоматически обнаруживаться инструментом, и только целевая кодировка должна предоставляться пользователем. Но, тем не менее, я также буду рад узнать о работающем решении, которое требует предоставления исходной кодировки.

Если кому-то нужен тест-кейс для проверки различных решений, приведенный выше пример доступен по этой ссылке .

14
задан 23 May 2017 в 15:39

7 ответов

Рабочее решение, которое я нашел, использует Код Microsoft Visual Studio текстовый редактор, который является Бесплатным программным обеспечением и доступный для Linux.

Открывают файл, Вы хотите преобразовать его кодирование в VS Code. У основания окна существует несколько кнопок. Один из них связан с кодированием файла, как показано ниже:

enter image description here

Нажатие этой кнопки открывается служебное меню, которое включает два объекта. Из этого меню выбирают опцию "Reopen with Encoding", точно так же, как ниже:

enter image description here

Это откроет другое меню, которое включает список другого кодирования, как показано ниже. Теперь выберите "арабский язык (Windows 1256)":

enter image description here

Это исправит текст мусора как это:

enter image description here

Теперь нажимают кнопку кодирования снова и на этот раз выбирают опцию "Save with Encoding", так же, как ниже:

enter image description here

И в новом меню выбирают опцию "UTF-8":

enter image description here

Это сохранит исправленный файл с помощью кодировки UTF-8:

enter image description here

Сделанный! :)

0
ответ дан 24 May 2017 в 01:39

Я не знаю, работает ли это с фарси: Я использую Gedit, он дает отказ с неправильным кодированием, и я могу, выбрал то, что я хочу перевести в UTF-8, это было просто текстом не освещенный формат, но здесь является снимком экрана!

enter image description here

Жаль я наконец прошел через свои текстовые файлы, поэтому теперь они все преобразовываются.

я любил блокнот ++ также, пропустите его все еще.

2
ответ дан 23 May 2017 в 15:39

Как дополнительное решение проблемы, я подготовил полезный сценарий 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

Этот сценарий попытается зафиксировать кодирование любого количества файлов, которые это обеспечивается, как введено. Обратите внимание, что файлы будут зафиксированы оперативные, таким образом, содержание будет перезаписано.

1
ответ дан 24 May 2017 в 01:39

Эти файлы 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 для персидского текста была, очевидно, тупиком: эта кодировка просто не содержит персидской буквы.

11
ответ дан 24 May 2017 в 01:39

Кроме iconv, который является очень полезным инструментом или самостоятельно или в сценарии, существует действительно простое решение, я нашел попытку выяснить ту же проблему для греческих наборов символов (Windows 1253 + ISO-8859-7).

Все, что необходимо сделать, должно открыть текстовый файл через "Открытое" диалоговое окно Gedit и не путем двойного щелчка по нему . У основания диалогового окна существует выпадающее для Кодирования, которое установлено на "Автоматически Обнаруженный" . Измените его на "Windows-125x" или другой подходящий кодовый набор, и текст будет совершенно читаем в Gedit. Можно затем сохранить его с помощью кодировки UTF-8, только чтобы быть уверенными, что у Вас не будет той же проблемы снова в будущем...

1
ответ дан 24 May 2017 в 01:39

Если Вам нравится работать в GUI вместо CLI, как я делаю:

  1. Открытый файл с Geany (редактор)
  2. Войдите в меню File-> Перезагрузка как
  3. Выберите принятое кодирование для изменения мусора в идентифицируемые символы на языке. Например, для чтения греческих нижних индексов я перезагрузил бы как западноевропеец-> греческий язык (Windows 1253)
  4. Войдите в меню Document> Кодирование Набора-> Unicode-> UTF-8
  5. Сохранить
1
ответ дан 24 May 2017 в 01:39

Я понял это в манджаро с gaupol и работает отлично, но вы должны делать это один за другим и не иметь пакетного режима

https://github.com/otsaloma/gaupol https:// pkgs.org/download/gaupol

Просто откройте файл (независимо от исходной кодировки) Сохранить как (Shift + Ctrl + S) В открывшемся окне измените кодировку на UTF-8. Нажмите Сохранить и готово

0
ответ дан 8 February 2021 в 12:13

Другие вопросы по тегам:

Похожие вопросы: