如何在VIM中将Windows控制台输出转换为utf8

时间:2019-03-03 14:00:49

标签: vim

我想从gvim执行系统命令,并在当前缓冲区中检索该命令的输出。所以我在gvim中运行以下命令:

:r echo éèà

但是结果显示三个黑色正方形而不是回显的字符。我还没有弄清楚该怎么做才能工作。我有以下编码设置:

set encoding=utf8
set termencoding=cp850

我的Windows控制台编码为cp850。

1 个答案:

答案 0 :(得分:0)

TL; DR

:r! echo éèà | c:\cygwin\bin\iconv -f cp850 -t cp1252

假设

我已经能够使用通过gvim的Windows安装程序安装的gvim 7.4在Windows 10计算机上重现您的问题。

我的机器上还有cygwin,其中有iconv,其完整路径为c:\gygwin\bin\iconv

建议的解决方案

显然,gvim希望Windows Shell的输出在cp1252中,因为这对我有用:

:r! echo éèà | c:\cygwin\bin\iconv -f cp850 -t cp1252

我检查了结果,Vim正确地在文档中插入了éèà的utf-8字符。

我没有等效于Windows本机的iconv,但是如果您有Cygwin,则可以将c:\cygwin\bin添加到Windows路径,并且该命令不需要显式路径。

结语

好这很丑。该解决方案至少在我的机器上有效,但是我希望有人能找到并发布一种更优雅的解决方案。

应该有一种方法告诉gvim从shell期望什么编码,但是我没有找到它。我使用encodingtermencodingfileencoding的各种设置组合进行游戏,而不是使用iconv,但只能设法获得不同的错误结果。

这些相关的问题也遇到了类似的问题,但是它们的解决方案在我的测试中也不起作用:

问题源于cmd.exe(Windows上vim中的默认:set shell)与gvim期望的字符编码不匹配。我不知道为什么更改:set termencoding不能解决问题。