- Is there a Linux command to find out if a file is UTF-8?
- 4 Answers 4
- Как определить кодировку файла или строки. Как конвертировать файлы в кодировку UTF-8 в Linux
- Программы для определения кодировки в Linux
- Команда file -i показывает неверную кодировку
- Программа enca для определения кодировки файла
- Как определить кодировку строки
- Изменение кодировки в Linux
- Использование команды iconv
- Конвертирование файлов из windows-1251 в UTF-8 кодировку
- Изменение кодировки программой enca
- Конвертация строки в правильную кодировку
- How to get character encoding of a file in Linux
- How to get character encoding of a file in Linux
- Get character encoding of a file using file command in Linux
- Get character encoding of a file using encguess command in Linux
- Get character encoding of a file using dfeal command in Linux
- Other Tutorials
- SUPPORT US VIA A VIRTUAL CUP OF COFFEE
Is there a Linux command to find out if a file is UTF-8?
The Joomla .ini files require to be saved as UTF-8. After editing I’m not sure if the files are UTF-8 or not. Is there a Linux command like file or a few commands that would tell if a file is indeed UTF-8 or not?
You cannot tell the encoding of a file. You can only make a smart guess. You might mostly guess right, but sometimes guesses fail. file is an example of a program doing smart guesses.
@Marco: It is possible to verify whether it is valid UTF-8 or not, however. There are some encodings which can mistakenly pass as valid UTF-8, but it almost never happens with ISO-8859-𝒏 or Windows-125𝒏 encodings/charsets.
4 Answers 4
You can determine the file encoding with the following command:
@kojow7 utf-8 has no header. Pure ASCII (7-bit only), is indistinguishable from utf-8 (that is the point of it, a header will cause all sorts of problems). So if you have a file that is ASCII for the first MB then has a single UTF-8 character, then you will not know, unless you read the whole file.
This should not be accepted as the answer. The ‘file’ command does not do that ; it reads only part of the file and uses magic numbers to take a best guess. On occasion ‘file’ can and will give you the incorrect answer. To verify if a file passes an encoding such as ascii, iso-8859-1, utf-8 or whatever then a good solution is to use the ‘iconv’ command.
There is, use the isutf8 command from the moreutils package.
No. However, it is good practice to make the link say where it leads me. Assume I’m reading only the blue text. After the edit, I can tell why and when I should click that. Before, I could not. (It wasn’t me who made the edit but I’m like 94% sure that this is what it was about.)
Nice, and works nicely with find -type f -exec isutf8 <> + , because it also quotes the filename. (And with using find . -exec . + is also fast)
Do not use the file command. It does not inspect the whole file, and it basically guesses. It sometimes gives incorrect answers.
You can verify if a file happens to pass UTF-8 encoding like this:
$ iconv -f utf8 -t utf8 -o /dev/null
A return code of zero means it passes UTF8. A non-zero return code means it is not valid UTF8.
It is not possible to know if a file was necessarily exported using any particular encoding scheme, as some encoding schemes overlap. To do that would require metadata to be embedded in the file, and even then you would be placing trust in whoever generated that file, rather than validating it yourself. and you should always validate it yourself.
Как определить кодировку файла или строки. Как конвертировать файлы в кодировку UTF-8 в Linux
В этой инструкции мы опишем что такое кодировка символов и рассмотрим несколько примеров конвертации файлов из одной кодировки в другую с использованием инструмента командной строки. Наконец, мы узнаем, как на Linux конвертировать несколько файлов из одного набора символов (charset) в UTF-8 кодировку.
Возможно, вы уже в курсе, что компьютер не понимает и не сохраняет буквы, числа или что-то ещё чем обычно оперируют люди. Компьютер работает с битами. Бит имеет только два возможных значения: 0 или 1, «истина» или «ложь», «да» или «нет». Все другие вещи, вроде букв, цифр, изображений должны быть представлены в битах, чтобы компьютер мог их обрабатывать.
Говоря простыми словами, кодировка символов – это способ информирования компьютера о том, как интерпретировать исходные нули и единицы в реальные символы, где символ представлен набором чисел. Когда мы печатаем текст в файле, слова и предложения, которые мы формируем, готовятся из разных символов, а символы упорядочиваются в кодировку.
Имеются различные схемы кодирования, среди них такие как ASCII, ANSI, Unicode. Ниже пример ASCII кодировки.
Символ биты A 01000001 B 01000010
Программы для определения кодировки в Linux
Команда file -i показывает неверную кодировку
Чтобы узнать кодировку файла используется команда file с флагами -i или —mime, которые включают вывод строки с типом MIME. Пример:
file -i mypoem_draft.txt file -i mynovel.txt
Команда file показывает кодировки, но для одного из моих файлов она неверна. Рассмотрим ещё одну альтернативу.
Программа enca для определения кодировки файла
Утилита enca определяет кодировку текстовых файлов и, если нужно, конвертирует их.
enca mypoem_draft.txt enca mynovel.txt
В этот раз для обоих файлов кодировка определена верно.
Запуск команды без опции выводит что-то вроде:
MS-Windows code page 1251 LF line terminators
Это удобно для чтения людьми. Для использования вывода программы в скриптах есть опция -e, она выводит только универсальное имя, используемое в enca:
enca -e mypoem_draft.txt CP1251/LF
Если вам нужно имя, которое используется для названия кодировок в iconv, то для этого воспользуйтесь опцией -i:
enca -i mypoem_draft.txt CP1251
Для вывода предпочитаемого MIME имени кодировки используется опция -m:
enca -m mypoem_draft.txt windows-1251
Для правильного определения кодировки программе enca нужно знать язык файла. Она получает эти данные от локали. Получается, если локаль вашей системы отличается от языка документа, то программа не сможет определить кодировку.
Язык документа можно явно указать опцией -L:
enca -m -L russian mypoem_draft.txt
Чтобы узнать список доступных языков наберите:
belarusian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 KOI8-U bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113 czech: ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK estonian: ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic croatian: CP1250 ISO-8859-2 IBM852 macce CORK hungarian: ISO-8859-2 CP1250 IBM852 macce CORK lithuanian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic latvian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic polish: ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK russian: KOI8-R CP1251 ISO-8859-5 IBM866 maccyr slovak: CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK slovene: ISO-8859-2 CP1250 IBM852 macce CORK ukrainian: CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr chinese: GBK BIG5 HZ none:
Как определить кодировку строки
Для определения, в какой кодировке строка, используйте одну из следующих конструкций:
echo $'СТРОКА_ДЛЯ_ПРОВЕРКИ' | chardet
echo $'СТРОКА_ДЛЯ_ПРОВЕРКИ' | enca -L ru
Вместо СТРОКА_ДЛЯ_ПРОВЕРКИ впишите строку, для которой нужно узнать кодировку. Если у вас строка не на русском языке, то откорректируйте значение опции -L.
echo $'\xed\xe5 \xed\xe0 \xe9\xe4\xe5\xed\xf3\xea \xe0\xe7\xe0\xed\xed\xfb\xe9\xec\xee\xe4\xf3\xeb\xfc' | chardet : windows-1251 with confidence 0.970067019236
echo $'\xed\xe5 \xed\xe0 \xe9\xe4\xe5\xed\xf3\xea \xe0\xe7\xe0\xed\xed\xfb\xe9\xec\xee\xe4\xf3\xeb\xfc' | enca -L ru MS-Windows code page 1251 LF line terminators
Если возникло сообщение об ошибке:
bash: chardet: команда не найдена
то попробуйте установить chardet из стандартных репозиториев.
Если chardet не найдена в репозиториях, то поищите программу uchardet, затем установите и используйте её.
Изменение кодировки в Linux
Использование команды iconv
В Linux для конвертации текста из одной кодировки в другую используется команда iconv.
Синтаксис использования iconv имеет следующий вид:
iconv опция iconv опции -f из-кодировки -t в-кодировку файл(ы) ввода -o файлы вывода
Где -f или —from-code означает кодировку исходного файла -t или —to-encoding указывают кодировку нового файла. Флаг -o является необязательным, если его нет, то содержимое документа в новой кодировке будет показано в стандартном выводе.
Чтобы вывести список всех кодировок, запустите команду:
Конвертирование файлов из windows-1251 в UTF-8 кодировку
Далее мы научимся, как конвертировать файлы из одной схемы кодирования (кодировки) в другую. В качестве примера наша команда будет конвертировать из windows-1251 (которая также называется CP1251) в UTF-8 кодировку.
Допустим, у нас есть файл mypoem_draft.txt его содержимое выводится как
Мы начнём с проверки кодировки символов в файле, просмотрим содержимое файла, выполним конвертирование и просмотрим содержимое файла ещё раз.
enca -i mypoem_draft.txt cat mypoem_draft.txt iconv -f CP1251 -t UTF-8//TRANSLIT mypoem_draft.txt -o poem.txt cat poem.txt enca -i poem.txt
Примечание: если к кодировке, в который мы конвертируем файл добавить строку //IGNORE, то символы, которые невозможно конвертировать, будут отбрасываться и после конвертации показана ошибка.
Если к конечной кодировке добавляется строка //TRANSLIT, конвертируемые символы при необходимости и возможности будут транслитерированы. Это означает, когда символ не может быть представлен в целевом наборе символов, он может быть заменён одним или несколькими выглядящими похоже символами. Символы, которые вне целевого набора символов и не могут быть транслитерированы, в выводе заменяются знаком вопроса (?).
Изменение кодировки программой enca
Программа enca не только умеет определять кодировку, но и может конвертировать текстовые файлы в другую кодировку. Особенностью программы является то, что она не создаёт новый файл, а изменяет кодировку в исходном.
Внимание! Следующая команда изменяет исходный файл, при этом иногда его просто обнуляет. Поэтому обязательно начните с создания резервной копии:
cp mypoem_draft.txt mypoem_draft.txt.bac
Желаемую кодировку нужно указать после ключа -x:
enca -x UTF-8 mypoem_draft.txt
Конвертация строки в правильную кодировку
Команда iconv может конвертировать строки в нужную кодировку. Для этого строка передаётся по стандартному вводу. Достаточно использовать только опцию -f для указания кодировки, в которую должна быть преобразована строка. Т.е. используется команда следующего вида:
echo $'СТРОКА_ДЛЯ_ИЗМЕНЕНИЯ_КОДИРОВКИ' | iconv -f 'ЖЕЛАЕМАЯ_КОДИРОВКА'
echo $'\xed\xe5 \xed\xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc' | iconv -f 'Windows-1251' не найден указанный модуль
Также для изменения кодировки применяются программы:
How to get character encoding of a file in Linux
Are you trying to get character encoding of a file in Linux? Well, follow through this guide to learn some simple ways that you can use to find or get character encoding of file in Linux.
How to get character encoding of a file in Linux
In Linux, there a number of commands that you can use to get character encoding of a file.
Get character encoding of a file using file command in Linux
file is a command in Linux that is used to determine other file types. It can as well be used to determine or get the character encoding of files.
Assuming you have a file, file.txt , if you want to get its character encoding, run the command below;
file.txt: UTF-8 Unicode text
From the output, the character encoding of the file.txt is UTF-8 .
You can also pass option -i/—mime to print the mime type strings such as text/plain; charset=us-ascii rather than ASCII text
file.txt: text/plain; charset=utf-8
If you want to omit filenames from the command output, use option -b/—brief .
text/plain; charset=utf-8
Get character encoding of a file using encguess command in Linux
encguess is a command provided by the perl (Debian/Ubuntu) or perl/perl-Encode (RHEL based) package that can be used to guess character encodings of files.
encguess [options] filename
To use an example of my file above, file.txt;
Read more on man pages, man encguess .
Get character encoding of a file using dfeal command in Linux
dfeal (detect-file-encoding-and-language) is an NPM command that is used determine the encoding and language of text files.
To install detect-file-encoding-and-language , you first need to install NPM;
sudo apt install nodejs npm -y
Next, install dfeal command;
sudo npm install -g detect-file-encoding-and-language
Getting the character encoding;
There could be more commands to get the character encoding for a file in Linux. Leave them in the comment section.
That marks the end of our guide on how to character encoding of a file in Linux.
Other Tutorials
SUPPORT US VIA A VIRTUAL CUP OF COFFEE
We’re passionate about sharing our knowledge and experiences with you through our blog. If you appreciate our efforts, consider buying us a virtual coffee. Your support keeps us motivated and enables us to continually improve, ensuring that we can provide you with the best content possible. Thank you for being a coffee-fueled champion of our work!