Как узнать кодировку файла linux

Обновлено: 01.07.2024

Администраторы Linux, работающие с веб-хостингом, знают, как важно соблюдать правильную кодировку символов HTML-документов.

Из следующей статьи вы узнаете, как проверить кодировку файла из командной строки в Linux.

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

Я также покажу наиболее распространенные примеры того, как преобразовать кодировку файла между кодировками CP1251 (Windows-1251, кириллица), UTF-8 , ISO-8859-1 и ASCII.

Полезный совет: хотите видеть свой родной язык в терминале Linux? Просто измените язык! Читать далее →

Проверить кодировку файла

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

< /tbody>
Опция Описание
-b , --brief Не печатать имя файла (краткий режим)
-i , --mime Печатать тип файла и кодировку

Проверьте кодировку файла в формате .txt:

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

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

Опция Описание
-f , --from-code Преобразовать кодировку файла из charset
-t , --to-code Преобразовать кодировку файла в charset
-o , --output Указать выходной файл (вместо stdout)

Изменить кодировку файла с CP1251 (Windows-1251, кириллица) на UTF-8:

Измените кодировку файла с кодировки ISO-8859-1 на кодировку и сохраните ее в файле out.txt:

Изменить кодировку файла с ASCII на UTF-8:

Изменить кодировку файла с кодировки UTF-8 на ASCII:

Недопустимая входная последовательность в позиции: поскольку UTF-8 может содержать символы, которые не могут быть закодированы с помощью ASCII, iconv будет генерировать сообщение об ошибке «недопустимая входная последовательность в позиции», если вы не сообщите об этом. для удаления всех символов, отличных от ASCII, с помощью параметра -c.

Опция Описание
-c Пропустить недопустимые символы из вывода

Вы можете потерять символы: обратите внимание, что если вы используете iconv с параметром -c, неконвертируемые символы будут потеряны.

Очень распространенная ситуация для тех, кто работает как на машинах Windows, так и на Linux.

Это касается, в частности, машин Windows с кириллицей.

Вы скопировали какой-то файл из Windows в Linux, но когда вы открываете его в Linux, вы видите «Каер-тî êðàêîçÿáðû» — WTF!?

Не паникуйте — такие строки можно легко преобразовать из кодировки CP1251 (Windows-1251, кириллица) в UTF-8 с помощью:

Список всех наборов символов

Список всех известных кодировок в вашей системе Linux:

Опция Описание
-l , --list Список известных кодировок

8 ответов на «Как проверить и изменить кодировку файлов в Linux»

Большое спасибо. Ваш рецепт очень помог!

Я использую Linux Mint 18.1 с Cinnamon 3.2. У меня были чешские символы в именах файлов (например, Pešek.m4a). š появился как ? и имя файла содержало предупреждение о неверной кодировке. Я использовал convmv для преобразования имен файлов (из iso-8859-1) в utf-8, но š теперь отображается как другой символ (квадрат с 009A в нем. Я попробовал команду файла, которую вы рекомендовали, и получил ответ, что кодировка была двоичной. Как мне решить эту проблему? Я хотел бы, чтобы имена файлов содержали правильные символы utf-8.
Спасибо за вашу помощь —

Уважаемый Анатолий, огромнейшее Вам спасибо за упоминание enca. очень помогла она мне сегодня. Хотя пост Ваш рассистский и странный, но, видимо, сильно наболело.

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

В метатеге HTML указано "charset=ISO-8859-1". Jedit позволяет использовать список резервных кодировок и список автоматических детекторов кодировок (в настоящее время «BOM XML-PI»), так что моя непосредственная проблема была решена. Но это заставило меня задуматься: а что, если бы метаданных там не было?

Когда информация о кодировке просто недоступна, существует ли программа CLI, которая может сделать "наилучшее предположение", какие кодировки могут применяться?

И хотя это немного другая проблема; существует ли программа CLI, которая проверяет достоверность известной кодировки?

4 ответа 4

Команда file делает "лучшие предположения" о кодировке. Используйте параметр -i, чтобы заставить файл печатать информацию о кодировке.

Вот как я создал файлы:

Сейчас все в utf-8. Но убедите себя:

Преобразовать в другие кодировки:

Проверьте шестнадцатеричный дамп:

Создайте что-то «недействительное», смешав все три:

Команда файла не имеет понятия "действительный" или "недействительный". Он просто видит несколько байтов и пытается угадать, какая может быть кодировка. Как люди, мы могли бы распознать, что файл является текстовым файлом с некоторыми умляутами в «неправильной» кодировке. Но как компьютеру ему нужен какой-то искусственный интеллект.

Можно возразить, что эвристика файла — это своего рода искусственный интеллект. Тем не менее, даже если это так, это очень ограниченный.

Спасибо, сработало. Я пробовал 'file , но без каких-либо опций :( . Теперь я также пробовал сочетание UTF-16, UTF-8 и ISO-8859-1. file -i` сообщило unknown-8bit . Итак, это также кажется быть ответом на вопрос: "Как определить неверную/неизвестную кодировку"

Не всегда можно точно определить кодировку текстового файла. Например, последовательность байтов \303\275 ( c3 bd в шестнадцатеричном формате) может быть ý в UTF-8, ý в latin1, Ă˝ в latin2, 羸 в BIG-5 и т. д.

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

Если в файле есть метаданные (HTML/XML charset= , TeX \inputenc , emacs -*-coding-*- , …), расширенные редакторы, такие как Emacs или Vim, часто могут анализировать эти метаданные. Однако это непросто автоматизировать из командной строки.

После редактирования я не уверен, что файлы имеют кодировку UTF-8 или нет.

Есть ли такая команда Linux, как file или несколько команд, которые определят, действительно ли файл имеет кодировку UTF-8 или нет?

Вы не можете определить кодировку файла. Вы можете только сделать умное предположение. Вы можете в основном угадывать правильно, но иногда догадки терпят неудачу. файл является примером программы, делающей умные предположения.

@Marco: Однако можно проверить, является ли это действительным UTF-8 или нет. Существуют некоторые кодировки, которые могут ошибочно приниматься за действительные UTF-8, но это почти никогда не происходит с кодировками/кодировками ISO-8859-𝒏 или Windows-125𝒏.

4 ответа 4

Вы можете определить кодировку файла с помощью следующей команды:

@kojow7 utf-8 не имеет заголовка. Чистый ASCII (только 7-битный) неотличим от utf-8 (в этом и смысл, заголовок вызовет всевозможные проблемы). Поэтому, если у вас есть файл, который является ASCII для первого МБ, а затем имеет один символ UTF-8, вы не узнаете, пока не прочитаете весь файл.

Это не следует принимать в качестве ответа. Команда «файл» этого не делает; он читает только часть файла и использует магические числа для наилучшего предположения. Иногда «файл» может и даст вам неверный ответ. Чтобы проверить, соответствует ли файл кодировке, такой как ascii, iso-8859-1, utf-8 или любой другой, хорошим решением является использование команды iconv.

Да, используйте команду isutf8 из пакета moreutils.


Нет. Тем не менее, это хорошая практика, чтобы ссылка говорила, куда она меня ведет. Предположим, я читаю только синий текст. После редактирования я могу сказать, почему и когда я должен нажать на это. Раньше я не мог. (Редактировал не я, но я на 94 % уверен, что речь шла именно об этом.)

Хорошо, и прекрасно работает с find -type f -exec isutf8 <> + , потому что он также заключает в кавычки имя файла. (И с использованием find . -exec . + также быстро)

Не используйте команду файла. Он не проверяет весь файл, а в основном угадывает. Иногда он дает неверные ответы.

Вы можете проверить, передает ли файл кодировку UTF-8 следующим образом:

Нулевой код возврата означает, что он соответствует кодировке UTF8. Ненулевой код возврата означает, что кодировка UTF8 недействительна.

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

Как найти кодировку файла и обновить кодировку файла?

Главные форумы Программирование оболочки и создание сценариев Как найти кодировку файла и обновить кодировку файла?

Информационный аватар участника

28, 0

Привет,
Я новичок в Unix.
Мое требование состоит в том, чтобы проверить кодировку, используемую во входящем файле (csv, txt). Если он закодирован в формате UTF-8, то файл должен оставаться таким же, иначе мне нужно изменить кодировку на UTF-8. .
Пожалуйста, посоветуйте мне, что делать дальше.

Информационный аватар участника

28, 0

Информационный аватар участника

4 996 477 

Вы не указали, на какой платформе работаете.На разных платформах есть разные утилиты, которые могут вам помочь. Например, в Solaris есть утилита auto_ef (Auto Encoding Finder), которая делает то, что вам нужно. В GNU/Linux эту информацию предоставляет файловая утилита.

Информационный аватар участника

28, 0

Чублер_XL

Информационный аватар участника

3791, 1452

В AIX вы, вероятно, захотите использовать iconv

Я сомневаюсь, что вы можете автоматизировать определение кодировки, используемой в файлах, если она каким-то образом не указана в самих файлах. Попробуйте поиграться с AIX file -i и посмотрите, что он думает о ваших входных файлах.

Информационный аватар участника

44, 0

Чублер_XL

Информационный аватар участника

3791, 1452

Еще 10 обсуждений, которые могут вас заинтересовать

1. Программирование оболочки и создание сценариев

Как узнать кодировку файла?

Обсуждение начато: tricampeon81

2. Солярис

Просмотреть кодировку файла, затем изменить кодировку.

Привет всем!! Я использую командный файл -i myfile.xml для проверки кодировки XML-файла, но это просто обычный файл. Я ожидаю / ищу вывод в виде UTF8 или ANSI / ASCII. Есть ли команда для отображения кодировки файлов? Спасибо! (2 ответа)

Обсуждение начато: mrreds

3. UNIX для продвинутых и опытных пользователей

Кодировка файлов ISO 88591 в Linux

Здравствуйте, эксперты! Пожалуйста, помогите мне разобраться, поскольку я столкнулся с проблемой переноса Java-приложения с hpux на redhat. Программа Java использует InputStreamReader для чтения файла без указания какого-либо параметра набора символов. Однако в новой среде Linux Redhat 5.6 при чтении файла, который. (1 ответ)

Обсуждение начато: sonic_air

4. UNIX для чайников, вопросы и ответы

Определение кодировки файла

Здравствуйте, я пытаюсь определить кодировку файла, потому что для преобразования в UTF-8 мне кажется, что мне нужно знать кодировку источника. Пробовал этот файл, дайте мне это: :data или текст на международном языке. Попытался увидеть локаль, и это результат. (6 ответов)

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