Чи є команда Linux, щоб дізнатися, чи файл UTF-8?


14

.iniФайли Joomla потрібно зберегти як UTF-8.

Після редагування я не впевнений, файли UTF-8 чи ні.

Чи є така команда Linux fileабо декілька команд, яка б підказувала, чи файл справді UTF-8 чи ні?


4
Ви не можете сказати кодування файлу. Можна зробити лише розумну здогадку. Ви здебільшого здогадуєтесь правильно, але іноді здогадки провалюються. fileє прикладом програми, яка робить розумні здогадки.
Марко

1
@Marco: Однак можна перевірити, чи дійсний він UTF-8 чи ні. Є кілька кодувань, які помилково можуть передаватися як дійсні UTF-8, але це майже ніколи не буває з кодуванням / діаграмами ISO-8859-𝒏 або Windows-125𝒏.
користувач1686

Відповіді:


28

Ви можете визначити кодування файлів за допомогою наступної команди:

file -bi filename

3
@nicolas Для MacOS ви можете спробувати file -I filename(-Я - це капітал i).
Рік

5
Чи читає це весь файл?
ctrl-alt-delor

2
@ kojow7 utf-8 не має заголовка. Чистий ASCII (лише 7-бітний), який не відрізняється від utf-8 (саме в цьому суть, заголовок викликає всілякі проблеми). Отже, якщо у вас є файл, який є ASCII для першого МБ, то він має один символ UTF-8, то ви цього не знаєте, якщо не прочитаєте весь файл.
ctrl-alt-delor

3
Це не слід сприймати як відповідь. Команда 'файл' цього не робить; він читає лише частину файлу і використовує магічні числа, щоб найкраще здогадатися. При нагоді "файл" може і дасть вам неправильну відповідь. Щоб перевірити, чи файл передає кодування, таке як ascii, iso-8859-1, utf-8 або будь-яке інше, хорошим рішенням є використання команди "iconv".
Тім

1
Я перевірив це, і він може і не вдається.
Тім

9

@davidpostill Мені цікаво, чи погана практика цитувати автора у посиланні?
Пабло Олмос де Агілера C.

Ні. Однак, це добре, щоб посилання сказала, куди мене веде. Припустимо, я читаю лише синій текст. Після редагування я можу сказати, чому і коли я повинен натиснути це. Раніше я не міг. (Я не
змінив цю редакцію,

Добре, і добре працює з ним find -type f -exec isutf8 {} +, оскільки він також цитує ім'я файлу. (І з використанням find ... -exec ... +також швидко)
Томаш

2

Не використовуйте fileкоманду. Він не перевіряє весь файл, і в основному це здогадується. Іноді дає неправильні відповіді.

Ви можете перевірити, чи не відбудеться передача файлу кодування UTF-8 таким чином:

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

Зворотний код, що дорівнює нулю, означає, що він передає UTF8. Ненульовий код повернення означає, що він недійсний UTF8.

Це неможливо знати , якщо файл був обов'язково експортувати з допомогою якої - небудь конкретної схеми кодування, так як деякі кодують схеми перекриваються. Для цього потрібно буде вбудувати метадані у файл, і навіть тоді ви будете довіряти тому, хто створив цей файл, а не перевіряти його самостійно ... і вам слід завжди перевіряти їх самі.


0

Ще один спосіб - це використання recode, яке вийде з помилкою, якщо він спробує розшифрувати UTF-8 і зустріне недійсні символи.

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.