如何在Vim中正确显示UTF-8字符

bsxbgnwa  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(490)

我想/需要编辑包含UTF-8字符的文件,我想使用Vim。在我被指责问了一些以前被问过的问题之前,我已经阅读了Vim关于编码,文件编码,术语编码等的文档,在谷歌上搜索了这个主题,并阅读了this question等文本。
下面是一个包含UTF-8字符的句子,我将其用作测试用例。

From Japanese 勝 (katsu) meaning "victory"

如果我用记事本打开(UTF-8)文件,它会正确显示。当我用Vim打开它时,我得到的最好的东西是一个黑色的正方形,日语字符katsu应该在那里。改变文件编码或编码的任何设置都不会有区别。
为什么Vim给我一个黑色的方块,而记事本显示它没有问题?如果我用复制/粘贴从Vim复制文本到记事本,它会正确显示,这表明文本没有损坏,但显示错误。但什么设置会影响这一点?
以下是my _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,语言是英语(美国)。
下面是在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字符。

ax6ht2ek

ax6ht2ek1#

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

:set guifont=MS_Gothic:h12:cSHIFTJIS

相关问题