How to convert windows console output to utf8 in VIM

拈花ヽ惹草 提交于 2019-12-24 18:51:01

问题


I want to execute a system command from gvim and retrieve the output of that command in the current buffer. So i run the following command in gvim:

:r echo éèà

However the result shows three black squares instead of the echoed characters. I have not yet figure out what to do to get this to work. I have the following encoding setup:

set encoding=utf8
set termencoding=cp850

My windows console encoding is cp850.


回答1:


TL;DR

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

Assumptions

I have been able to reproduce your problem on my Windows 10 machine using gvim 7.4, installed via the Windows installer for gvim.

I also have cygwin on my machine, in which I have iconv, and its full path is c:\gygwin\bin\iconv.

Proposed solution

Apparently, gvim expects the output from the Windows shell to be in cp1252 because this worked for me:

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

I checked the results, and Vim correctly inserted the utf-8 characters for éèà in my document.

I don't have an equivalent to iconv that is Windows native, but if you have Cygwin you can add c:\cygwin\bin to your Windows path and the command should not require an explicit path.

Epilogue

Yuck. This is ugly. The solution works, at least on my machine, but I hope someone finds and posts a more elegant solution.

There ought to be a way to tell gvim what encoding to expect from the shell, but I did not find it. I played with various combinations of settings of encoding, termencoding and fileencoding instead of using iconv, but only managed to get different wrong results.

These related questions faced similar problems but their solutions didn't work in my tests either:

  • https://superuser.com/questions/682591/vim-uses-wrong-encoding-when-invoking-commands-in-the-terminal
  • https://vi.stackexchange.com/questions/7105/wrong-encoding-while-calling-shell

The problem stems from the mismatch in character encoding between cmd.exe (default :set shell in vim on Windows) and what gvim expects. I don't know why changing :set termencoding does not fix the problem.



来源:https://stackoverflow.com/questions/54969583/how-to-convert-windows-console-output-to-utf8-in-vim

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!