85

Скажем, я редактирую какой-то файл с помощью vim (или gvim). Я понятия не имею о кодировке файла, и я хочу знать, находится ли он в UTF-8 или ISO-8859-1 или что-то еще? Могу ли я как-то сказать vim, чтобы показать мне, какая кодировка используется?

2 ответа2

96

Параметр fileencoding показывает кодировку текущего буфера:

:set fileencoding
fileencoding=utf8

На самом деле не существует общего способа определения кодировки открытого текста, поскольку эта информация не сохраняется в самом файле - за исключением файлов UTF-8, где у вас есть так называемая спецификация, которая обозначает кодировку. Вот почему файлы xml и html имеют метатеги charset.

Вы можете применить определенную кодировку с помощью параметра «кодировка». Смотрите :help encoding и :help fileencoding в Vim для того, как редактор обрабатывает эти настройки. Вы также можете добавить несколько настроек кодирования файлов в ваш vimrc, чтобы vim попытался определить их на основе перечисленных.

12

Обратите внимание, что кодировка файлов явно не указана нигде в файле. Таким образом, 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .