Скажем, я редактирую какой-то файл с помощью vim (или gvim). Я понятия не имею о кодировке файла, и я хочу знать, находится ли он в UTF-8 или ISO-8859-1 или что-то еще? Могу ли я как-то сказать vim, чтобы показать мне, какая кодировка используется?
2 ответа
Параметр fileencoding показывает кодировку текущего буфера:
:set fileencoding
fileencoding=utf8
На самом деле не существует общего способа определения кодировки открытого текста, поскольку эта информация не сохраняется в самом файле - за исключением файлов UTF-8, где у вас есть так называемая спецификация, которая обозначает кодировку. Вот почему файлы xml и html имеют метатеги charset.
Вы можете применить определенную кодировку с помощью параметра «кодировка». Смотрите :help encoding
и :help fileencoding
в Vim для того, как редактор обрабатывает эти настройки. Вы также можете добавить несколько настроек кодирования файлов в ваш vimrc, чтобы vim попытался определить их на основе перечисленных.
Обратите внимание, что кодировка файлов явно не указана нигде в файле. Таким образом, VIM и другие приложения должны угадать кодировку. Канонический способ сделать это с помощью приложения chardet
, которое можно запустить из VIM следующим образом:
:!chardet %
Ответ, предоставленный jtimberman, показывает кодировку текущего буфера, которая может не совпадать с кодировкой файла на диске. Таким образом, вы заметите, что chardet
иногда будет показывать кодировку, отличную от VIM, особенно если у вас есть VIM, настроенный на постоянное использование определенной кодировки (то есть UTF-8).
Хорошая особенность chardet
состоит в том, что он дает оценку достоверности для своего предположения, тогда как VIM может (и часто ошибается) ошибаться в предположении кодировки, если не много символов над \x7F (ASCII 127). Например, добавление одного א
к длинному файлу кода PHP заставляет chardet
думать, что это файл ISO-8859-2
с уверенностью 0,72, тогда как добавление чуть более длинной фразы שלום, עולם!
дает UTF-8 с доверительной вероятностью 0,99. В обоих случаях set fileencoding?
показал UTF-8
не потому, что файл на диске был UTF-8, а потому, что VIM настроен для внутреннего использования UTF-8.