Say I am editing some file with vim (or gvim). I have no idea about the file's encoding and I want to know whether it is in UTF-8 or ISO-8859-1 or whatever? Can I somehow tell vim to show me what encoding is used?
The fileencoding setting shows the current buffer's encoding:
:set fileencoding fileencoding=utf8
There really isn't a common way to determine the encoding of a plaintext file, as that information isn't saved in the file itself - except UTF-8 Files where you've got a so called BOM which indicates the Encoding. This is why xml and html files have charset metatags.
You can enforce a particular encoding with the 'encoding' setting. See
:help encoding and
:help fileencoding in Vim for how the editor handles these settings. You can also add several fileencoding settings to your vimrc to have vim try detecting based on the ones listed.
Note that files' encoding is not explicitly stated anywhere in a file. Thus, VIM and other applications must guess at the encoding. The canonical way of doing this is with the
chardet application, which can be run from within VIM as so:
The answer provided by jtimberman shows you the encoding of the current buffer which may not be the same encoding as the file on disk. Thus, you will notice that
chardet will sometimes show a different encoding than VIM, especially if you have VIM configured to always use a specific encoding (i.e. UTF-8).
The nice thing about
chardet is that it gives a confidence score for its guess, whereas VIM can be (and often is) wrong about guessing the encoding if there are not many characters above \x7F (ASCII 127). For instance, adding a single
א to a long file of PHP code makes
chardet think that the file is
ISO-8859-2 with a confidence of 0.72, whereas adding the slightly longer phrase
שלום, עולם! gives UTF-8 with a confidence score of 0.99. In both cases,
set fileencoding? showed
UTF-8 not because the file on disk was UTF-8, but because VIM is configured to use UTF-8 internally.
You can reload a file using a different encoding if Vim was not able to detect the correct encoding :
encoding could be
cp850, ISO-8859-1, UTF-8, ...
You can use
file yourfilename to find encoding or
chardetect (provided by
uchardet depending your Linux distribution) as suggested by dotancohen.