Как я могу быть уверен в кодировке файла?

У меня есть файл PHP, который я создал с помощью VIM, но я не уверен, какая его кодировка.

Когда я использую терминал и проверяю кодировку командойfile -bi foo (Моя операционная система Ubuntu 11.04) дает следующий результат:

text/html; charset=us-ascii

Но когда я открываю файл с помощью gedit, он говорит, что его кодировка UTF-8.

Который правильный? Я хочу, чтобы файл был закодирован в UTF-8.

Я предполагаю, что в файле нет спецификации и что командаfile -bi читает файл и не находит никаких символов UTF-8, поэтому предполагается, что он является ascii, но в действительности он закодирован в UTF-8.

 dan0413 июн. 2012 г., 19:13
Какие не-ASCII символы находятся в вашем файле?

Ответы на вопрос(4)

#/bin/bash

if [ "$#" -lt 1 ]
then
  echo "Usage: utf8-check filename"
  exit 1
fi

chardet $1
countchars="$(tr -d \\000-\\177 < $1 | wc -c)"
if [ $countchars -eq 0 ]
then
 echo "Ascii";
 exit 0
fi

{
  iconv -f utf-8 -t ucs-4 < $1 >/dev/null
  echo "UTF-8"
} || {
  echo "not UTF-8 or corrupted"
}
$ file --mime my.txt 
my.txt: text/plain; charset=iso-8859-1
 18 мар. 2016 г., 20:36
Я считаю важным отметить, что, как @Celada уже упоминал,file не могуgrant что это обнаружение является 100% правильным.
 03 апр. 2015 г., 19:27
Это спасло меня! Спасибо большое!
Решение Вопроса

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

Что, как говорится,file как правило, для определения его типа проверяется только короткий сегмент в начале файла, поэтому он может объявлять его us-ascii, если есть символы не ASCII, но они находятся за начальным сегментом файла. С другой стороны, gedit может сказать, что файл имеет формат UTF-8, даже если это ASCII, потому что UTF-8 является предпочтительной кодировкой символов gedit, и он намеревается сохранить файл с UTF-8, если вы добавите любой -ASCII символов во время сеанса редактирования. Опять же, если это то, что Gedit говорит, это не будет неправильно.

Теперь к вашему вопросу:

Run this command:

tr -d \\000-\\177 < your-file | wc -c

If the output says "0", then the file contains only ASCII characters. It's in ASCII (and it's also valid UTF-8) End of story.

Run this command

iconv -f utf-8 -t ucs-4 < your-file >/dev/null

If you get an error, the file does not contain valid UTF-8 (or at least, some part of it is corrupted).

If you get no error, the file is extremely likely to be UTF-8. That's because UTF-8 has properties that make it very hard to mistake typical text in any other commonly used character encoding for valid UTF-8.

 08 мая 2015 г., 06:49
это дает мне 1120, что это значит?
 ecantu14 июн. 2012 г., 00:12
Первая команда вернула 0, а вторая команда не вернула ошибку, так что мы можем сказать, что это UTF-8. Спасибо!
 08 мая 2015 г., 17:06
What дает вам 1120?wc? Если так, то я думаю, у вас есть 1120 байтов не ASCII в файле.

(в Linux)

$ chardet <filename>

он также обеспечивает уровень достоверности [0-1] выходных данных.

Ваш ответ на вопрос