Изменить кодировку файла на utf 8 linux

Обновлено: 21.11.2024

Некоторые файлы, такие как файлы импорта и экспорта Moodle, а также пользовательские языковые пакеты или языковые файлы из сторонних модулей, необходимо преобразовать или обработать как UTF-8, прежде чем их можно будет использовать с Moodle.

Спис трещи

*nix как компьютеры (включая Mac OS X)

Как правило, это можно сделать с помощью команды iconv в Unix, Linux или Mac.

icon -f original_charset -t utf-8 исходный файл > новый файл

см. также пояснение к Windows - скрипт существует для компьютеров *nix, но используется в среде cygwin

Компьютеры Windows

Для Windows существует четыре метода преобразования.

Способ 1

Метод 2

Загрузите версию программы iconv для Windows. Скачайте «Полный пакет, кроме исходников» и запустите программу установки. Исполняемый файл находится в папке bin. Запустите из командной строки (Пуск -> Выполнить -> cmd) и следуйте приведенным выше инструкциям.

Способ 3

Преобразование также можно выполнить с помощью Cygwin, похожей на Linux среды для Windows, и выполнения команды iconv в этой среде. Вот пример рабочего решения для Windows с Cygwin:

  • Создайте текстовый файл с именем ToUtf8.txt
  • Заполните его следующим кодом

Две вещи должны быть изменены для вашей местной ситуации:

  1. FROM – исходная кодировка (в которой находятся исходные файлы).
  2. ToUTF — это имя папки, в которой находятся файлы, которые необходимо преобразовать. Эта папка может содержать вложенные папки. Убедитесь, что у вас есть резервная копия!
  • Запустите Cygwin.
  • С именем папки cd cd. ls перейдите в папку на вашем компьютере с Windows, где находятся скрипт ToUtf8.txt и папка ToUTF8.
  • Выполните скрипт, введя sh ToUtf8.txt, и ваши файлы будут преобразованы.

Метод 4

Формат Unicode по умолчанию для Microsoft Excel и Wordpad — UTF-16. Эти файлы можно преобразовать в UTF-8 с помощью GNU Emacs 22.1

  • Откройте файл с помощью Emacs
  • Введите команду C-x RET c utf-8 RET
  • Затем вас спросят, к какой команде вы хотите применить эту кодировку
  • Введите команду C-x C-w, затем введите новое имя файла.
  • Сохраненный файл будет иметь кодировку UTF-8

Сохранение файлов непосредственно в кодировке UTF-8

Большинство современных текстовых редакторов могут работать с кодировкой UTF-8, хотя вам, возможно, придется указать им это при загрузке и сохранении файлов. (Заметным исключением, вероятно, является Блокнот в Windows.)

Окна

Вы можете сохранить файл с помощью Блокнота (иногда называемого "Редактор") в кодировке UTF-8, но не в Wordpad.

  1. Открыть Блокнот
  2. Файл – Сохранить как > там вы видите 3 поля, в последнем из которых под названием "кодировка" задайте значение UTF-8.

Mac OS X

Встроенное приложение для редактирования текста имеет параметр "Кодировка простого текста" в окне "Сохранить как". диалог.

Линукс

Стандартный текстовый редактор Gnome по умолчанию использует UTF-8 и имеет параметры набора символов при загрузке и сохранении.

Какой самый быстрый и простой инструмент или метод для преобразования текстовых файлов между наборами символов?

В частности, мне нужно преобразовать UTF-8 в ISO-8859-15 и наоборот.

Возможно все: однострочники на вашем любимом языке сценариев, инструменты командной строки или другие утилиты для ОС, веб-сайтов и т. д.

Лучшие решения на данный момент:

В Linux/UNIX/OS X/cygwin:

Gnu iconv, предложенный Troels Arvin, лучше всего использовать в качестве фильтра. Кажется, он доступен повсеместно. Пример:

Как указал Бен, существует онлайн-конвертер, использующий iconv.

recode (вручную), предложенный Cheekysoft, преобразует один или несколько файлов на месте. Пример:

В этом используются более короткие псевдонимы:

Recode также поддерживает поверхности, которые можно использовать для преобразования между различными типами окончания строки и кодировкой:

Преобразование новых строк из LF (Unix) в CR-LF (DOS):

Файл кодировки Base64:

Вы также можете комбинировать их.

Преобразование файла UTF8 в кодировке Base64 с окончаниями строк Unix в файл Latin 1 в кодировке Base64 с окончаниями строк Dos:

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

(Однако нет поддержки ISO-8859-15; в нем говорится, что поддерживаемые кодировки: unicode, utf7, utf8, utf32, ascii, bigendianunicode, default и oem.)

Вы имеете в виду поддержку ISO-8859-1? Использование «String» делает это, например. наоборот

Примечание. Возможные значения перечисления: "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".

  • CsCvt – конвертер набора символов Kalytta – еще один отличный инструмент для преобразования на основе командной строки для Windows.

Просто наткнулся на это в поисках ответа на похожий вопрос – отличное резюме!Просто подумал, что стоит добавить, что recode также будет действовать как фильтр, если вы не передадите ему имена файлов, например: recode utf8..l9 out.txt

Если вы используете enca , вам не нужно указывать входную кодировку. Часто достаточно просто указать язык: enca -L ru -x utf8 FILE.TXT.

На самом деле, iconv работал намного лучше как встроенный преобразователь, а не как фильтр. Преобразование файла с более чем 2 миллионами строк с помощью iconv -f UTF-32 -t UTF-8 input.csv > output.csv сэкономило всего около семисот тысяч строк, только треть. С помощью встроенной версии iconv -f UTF-32 -t UTF-8 file.csv успешно преобразованы все более 2 миллионов строк.

21 Ответ 21

Ни один из этих аргументов указывать не нужно. По умолчанию они будут соответствовать вашей текущей локали, обычно UTF-8.

Для всех, кого смущает отсутствие версий без тире, похоже, что OSX (и, возможно, все BSD) версии iconv не поддерживают псевдонимы без тире для различных кодировок UTF-*. иконка -l | grep UTF сообщит вам обо всех кодировках, связанных с UTF, которые поддерживает ваша копия iconv.

Не знаете кодировку входного файла? Используйте charde in.txt, чтобы сгенерировать наилучшее предположение. Результат можно использовать как КОДИРОВАНИЕ в iconv -f КОДИРОВАНИЕ .

Предотвратить выход при недопустимых символах (избегая недопустимой последовательности ввода в сообщениях о позиции) и заменить «странные» символы «похожими» символами: iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT in. txt > out.txt .

Мне это нравится, потому что это стандарт для большинства платформ NIX. Но также см. параметр команды VIM (псевдоним: ex ) ниже. Дополнительная информация: (1) вам (вероятно) не нужно указывать параметр -f (from) с iconv . (2) команда file --mime-encoding может помочь вам определить кодировку в первую очередь.

FWIW команда файла сообщила, что мой источник имеет вид UTF-16 Little Endian; работает iconv -f UTF-16 -t UTF-8. неправильно преобразовал его в ASCII, мне пришлось явно указать iconv -f UTF-16LE. для вывода UTF-8

Если у вас есть vim, вы можете использовать это:

Не тестировалось для каждой кодировки.

Самое интересное в этом то, что вам не нужно знать исходную кодировку

Имейте в виду, что эта команда изменяет непосредственно файл

Пояснение!

  1. + : используется vim для прямого ввода команды при открытии файла. Обычно используется для открытия файла в определенной строке: vim +14 file.txt
  2. | : разделитель нескольких команд (например, ; в bash)
  3. установить nobomb : нет спецификации utf-8
  4. set fenc=utf8 : установить новую кодировку для ссылки на документ utf-8
  5. x : сохранить и закрыть файл
  6. filename.txt: путь к файлу
  7. " : кавычки здесь из-за каналов. (иначе bash будет использовать их как каналы bash)

Довольно круто, но несколько медленно. Есть ли способ изменить это, чтобы конвертировать сразу несколько файлов (таким образом экономя затраты на инициализацию vim)?

Спасибо за объяснение! У меня были трудности с началом файла, пока я не прочитал о настройке бомба/нобомба.

например: find -regextype posix-extended -type f -regex ".*\.(h|cpp|rc|fx|cs|props|xaml)" -exec vim +'set nobomb | установить fenc=utf8 | х' <> \;

Я использовал это для преобразования кодировки CSV-файлов и был очень взволнован, когда увидел, что кодировка действительно изменилась. К сожалению, когда я начал загружать файл в MySQL, в нем было другое количество столбцов, чем то, которое было до запуска команды vim. Интересно, можно ли просто открыть файл, преобразовать кодировку и сохранить/закрыть файл, оставив все остальное содержимое файла без изменений?

В Linux вы можете использовать очень мощную команду recode, чтобы попытаться выполнить преобразование между различными кодировками, а также любые проблемы с окончанием строки. recode -l покажет вам все форматы и кодировки, между которыми может конвертировать инструмент. Вероятно, это будет ОЧЕНЬ длинный список.

Самая короткая версия, если вы можете предположить, что входная спецификация верна:

<р>. ой. Думаю, это почти одно и то же. У меня возникли проблемы с запуском вашего примера, потому что я предполагал, что обе версии используют один и тот же файл file-utf8.txt для ввода, поскольку они обе имеют один и тот же выходной файл, что и file-utf7.txt .

Это было бы действительно здорово, если бы не поддержка UTF16. Он поддерживает UTF32, но не UTF16! Мне не нужно было бы конвертировать файлы, за исключением того, что многие программы Microsoft (например, SQL server bcp) настаивают на UTF16, и тогда их утилита не будет конвертировать в нее. Мягко говоря, интересно.

Также существуют инструменты на основе iconv на многих языках.

Я поместил это в .bashrc :

..чтобы иметь возможность конвертировать файлы следующим образом:

лучше использовать tmp=$(mktmp) для создания временного файла. Кроме того, строка с rm избыточна.

В Windows я смог использовать Notepad++ для преобразования ISO-8859-1 в UTF-8. Нажмите "Кодировка", а затем "Преобразовать в UTF-8".

Кодировка символов всех соответствующих текстовых файлов определяется автоматически, и все соответствующие текстовые файлы преобразуются в кодировку utf-8:

Для выполнения этих шагов используется подоболочка sh с параметром -exec , запуск однострочника с флагом -c и передача имени файла в качестве позиционного аргумента "$1" с параметром -- <> . В промежутке выходной файл utf-8 временно называется convert .

-b , --brief Не добавлять имена файлов перед строками вывода (краткий режим).

-i , --mime Заставляет команду файла выводить строки MIME-типа, а не более традиционные, удобочитаемые для человека. Таким образом, он может сказать, например, text/plain; charset=us-ascii, а не текст ASCII. Команда sed обрезает это только до us-ascii, как того требует iconv .

Команда find очень полезна для такой автоматизации управления файлами. Нажмите здесь, чтобы узнать больше.

Вопрос: у меня есть файл субтитров в кодировке "iso-8859-1", который показывает неверные символы в моей системе Linux, и я хотел бы изменить его кодировку текста на набор символов "utf-8". Что в Linux является хорошим инструментом для преобразования кодировки символов в текстовый файл?

Как вы уже знаете, компьютеры могут обрабатывать только двоичные числа на самом низком уровне, а не символы. При сохранении текстового файла каждый символ в этом файле сопоставляется с битами, и именно эти «биты» фактически хранятся на диске. Когда приложение позже открывает этот текстовый файл, каждое из этих двоичных чисел считывается и сопоставляется с исходными символами, понятными нам, людям. Этот процесс «сохранить и открыть» лучше всего выполнять, когда все приложения, которым требуется доступ к текстовому файлу, «понимают» его кодировку, то есть то, как двоичные числа сопоставляются с символами, и, таким образом, могут обеспечить «обратный путь» понятных данных.< /p>

Если разные приложения используют разные кодировки при работе с текстовым файлом, нечитаемые символы будут отображаться везде, где в исходном файле встречаются специальные символы. Под специальными символами мы подразумеваем те, которые не являются частью английского алфавита, например, символы с диакритическими знаками (например, ñ, á, ü).

Затем возникают вопросы: 1) как узнать, какую кодировку символов использует определенный текстовый файл? и 2) как преобразовать его в какую-либо другую кодировку по своему выбору?

Шаг первый: определение кодировки символов в файле

Чтобы узнать кодировку символов файла, мы будем использовать инструмент с запятой под названием file . Поскольку команда file является стандартной программой UNIX, мы можем ожидать, что найдем ее во всех современных дистрибутивах Linux.

Выполните следующую команду:

Шаг второй: узнайте, какие кодировки текста поддерживаются

Следующий шаг — проверить, какие виды кодировки текста поддерживаются в вашей системе Linux. Для этого мы будем использовать инструмент iconv с флагом -l (нижняя буква L), в котором будут перечислены все поддерживаемые в настоящее время кодировки.

Утилита iconv является частью библиотек GNU libc, поэтому она доступна во всех дистрибутивах Linux.

Шаг 3. Преобразование кодировки текста

После того, как мы выбрали целевую кодировку среди тех, которые поддерживаются в нашей системе Linux, давайте запустим следующую команду, чтобы выполнить преобразование:

Например, чтобы преобразовать iso-8859-1 в utf-8:

Зная, как использовать эти инструменты вместе, как мы продемонстрировали, вы можете, например, исправить поврежденный файл субтитров:

Поддержка Xmodulo

Этот веб-сайт стал возможен благодаря минимальной рекламе и вашему любезному пожертвованию через PayPal (кредитная карта) или биткойн ( 1M161JGAkz3oaHNvTiPFjNYkeABox8rb4g ).

Каждый файл имеет кодировку символов, которая сообщает операционной системе компьютера или любой программе, которая ее использует, информацию о файле. Когда мы храним данные в файле, программа, которую вы используете для хранения данных, кодирует всю информацию в определенном формате. Этот формат используется всеми другими программами, которые читают этот файл. Иногда вам может понадобиться преобразовать файлы в формат UTF-8, который общепризнан большинством приложений. В этой статье мы узнаем, как конвертировать файлы в UTF-8 в Linux.

Как конвертировать файлы в UTF-8 в Linux

Существует множество инструментов, позволяющих преобразовывать файлы из одной кодировки символов в другую. Мы будем использовать iconv для нашей цели.

1. Проверьте его текущую кодировку

Откройте терминал и запустите команду файла, чтобы проверить его текущую кодировку. Допустим, у вас есть файл sample.txt.

2. Преобразование файлов в UTF-8

iconv уже установлен по умолчанию в большинстве систем Linux. Вот команда для преобразования кодировки символов файла с помощью команды iconv.

В приведенной выше команде вам необходимо указать текущую кодировку файла вместо from_encoding и новую кодировку файла вместо to_encoding.

Вот команда для преобразования файла sample.txt из формата ISO-8859 в формат UTF-8.

Далее вы можете проверить новую кодировку символов с помощью команды file.

3. Преобразование нескольких файлов в UTF-8

Если вы хотите преобразовать несколько файлов в папке в формат UTF-8 с помощью iconv, используйте цикл for для запуска iconv отдельно для каждого файла. Мы создадим для него сценарий оболочки.

Добавьте в него следующие строки.

Сохраните и закройте файл.

Сделать его исполняемым

Запустите указанный выше скрипт с помощью следующей команды. Первый аргумент — это текущая кодировка файлов в вашей папке, а второй аргумент — расположение папки, содержащей файлы.

Приведенный выше скрипт преобразует все файлы .txt в указанной папке в кодировку UTF-8 и создает отдельную копию каждого файла с расширением .utf8.converted.

В этой статье мы узнали, как конвертировать файлы в формат UTF-8. Вы можете использовать описанные выше шаги для преобразования одного или нескольких файлов.

Читайте также: