Ответ 1
Хорошо, прежде всего, обратите внимание, что ASCII является подмножеством UTF-8, поэтому, если ваш файл содержит только символы ASCII, правильно сказать, что он закодирован в ASCII, и он правильно сказал, что он закодирован в UTF-8.
При этом file
обычно рассматривает только короткий сегмент в начале файла, чтобы определить его тип, поэтому он может объявить его us-ascii, если есть символы, отличные от ASCII, но они выходят за начальный сегмент файла. С другой стороны, gedit может сказать, что файл UTF-8, даже если он ASCII, потому что UTF-8 является предпочтительной кодировкой gedit, и он намерен сохранить файл с UTF-8, если вы должны были добавить любые символы, отличные от ASCII, во время ваш сеанс редактирования. Опять же, если это то, что говорит гедит, это было бы неправильно.
Теперь на ваш вопрос:
-
Запустите эту команду:
tr -d \\000-\\177 < your-file | wc -c
Если на выходе указано "0", тогда файл содержит только символы ASCII. Это в ASCII (и это также действительный UTF-8) Конец истории.
-
Запустите эту команду
iconv -f utf-8 -t ucs-4 < your-file >/dev/null
Если вы получили сообщение об ошибке, файл не содержит допустимого UTF-8 (или, по крайней мере, некоторая часть его повреждена).
Если вы не получите ошибки, файл, скорее всего, будет UTF-8. Это связано с тем, что UTF-8 обладает свойствами, которые очень затрудняют ошибку типичного текста в любой другой широко используемой кодировке символов для действительного UTF-8.