如何正确显示VI中的UTF-8 chachaters

时间:2016-10-03 21:39:31

标签: vim utf-8

我想/需要编辑其中包含UTF-8字符的文件,我想使用VIM。 在我被指责询问之前提出的问题之前,我已经阅读了关于编码,文件编码[s],termencoding等的VIM文档,用Google搜索主题并阅读其他文本中的this question

这是一个带有UTF-8字符的句子,我用它作为测试用例。

From Japanese 勝 (katsu) meaning "victory"

如果我用记事本打开(UTF-8)文件,它显示正确。 当我用vim打开它时,我得到的最好的东西是一个黑色方块,其中katsu的日语字符应该是。 更改fileencoding或encoding的任何设置都无济于事。

为什么vim给我一个黑色方块,记事本在没有问题的情况下显示它?如果我将文本从vim复制/粘贴复制到记事本,则显示正确。指示文本未损坏但显示错误。但是什么设置会对此产生影响呢?

欢迎任何建议

这是我的_vimrc的相关部分。

if has("multi_byte")
  set encoding=utf-8
  if &termencoding == ""
    let &termencoding = &encoding
  endif
  setglobal fileencoding=utf-8
  set fileencodings=ucs-bom,utf-8,latin1
endif

我打开文件时的实际设置是:

encoding=utf-8
fileencoding=utf-8
termencoding=utf-8

我的电脑正在运行Windows 10,语言为英语(美国)。

====编辑2016年10月4日。====

这是在vim中加载文件并将其转换为十六进制后文件内容的样子。

0000000: efbb bf46 726f 6d20 4a61 7061 6e65 7365  ...From Japanese
0000010: 20e5 8b9d 2028 6b61 7473 7529 206d 6561   ... (katsu) mea
0000020: 6e69 6e67 2022 7669 6374 6f72 7922 0d0a  ning "victory"..

第一个字节是微软BOM魔术,其余部分就像ascii,除了第二行的第二,第三和第四个字节,它必须以某种方式表示非ascii字符。

1 个答案:

答案 0 :(得分:1)

使Vim成功显示UTF-8字符有两个步骤:

  1. 文件编码。您已正确识别出这是由'encoding''fileencodings'选项控制的。一旦你正确设置了它(你可以通过:setlocal filenencoding?验证,或者ga命令对已知字符进行验证,或者至少通过检查每个字符是由单个单元格表示,而不是组成字节值),有:
  2. 字符显示。也就是说,您需要使用包含UTF-8字形的字体。 UTF-8很大;大多数字体不包含所有字形。根据我的经验,这不是Linux上的问题,Linux似乎内置了一些自动回退功能。但是在Windows上,您需要安装和配置正确的字体(GVIM:guifont)。
  3. 例如,要正确显示日语汉字字符,您需要在Windows中安装远东语言支持,然后

    :set guifont=MS_Gothic:h12:cSHIFTJIS