Я экспериментировал с диаграммой DOT и пытался сделать следующее:
:! dot -Tpng -oFab.png %
Я получил ошибку, потому что мое имя файла имеет специальный символ (" ó
" в "Fabricación"):
C:\windows\system32\cmd.exe /c ( dot -Tpng -oFab.png Fabricaci├│n.gv)
Error: dot: can't open Fabricaci├│n.gv
shell returned 2
Hit any key to close this window...
Как видите, специальный символ меняется на " ├│
". Это с vim и gVim 7.4 под Win7 и NTFS, поэтому я предполагаю, что имя файла в UTF16 . Я также предполагаю, что при вызове shell / cmd имя файла интерпретируется как некоторая другая кодировка (спасибо Carpetsmoker за указание на то, что по умолчанию используется кодовая страница 850 ).
Как я могу это исправить?
Конечно, я могу просто переименовать файл, но я хотел бы знать, почему это происходит и как это исправить.
Обновление : я только что нашел этот вопрос в superuser.SE (благодаря обратной связи @ ChristianBrabandt ), но, похоже, он тоже не помогает.
cmd
приняла имя файла, но установка Unix-подобной среды была бы моей собственной предпочтительной обработкой.cmd.exe
не Unicode, а кодовая страница 850 . Также посмотрите этот ответ .Ответы:
Короткий ответ
Проблема заключается в
dot.exe
. GraphViz может открывать файлы с путями Unicode в Linux, но не в Windows, если (возможно), если они скомпилированы с Visual Studio 2005.Исследование
Кодовая страница установлена в
850
, Vim кодировка вUTF-8
.Это не дает точно такую же ошибку, но,
dot.exe
кажется, получает неправильный аргумент. Я попытался передать то же имя файла другой программе.И это сработало как раз правильно. Выполнение обоих
dot.exe
иtype
непосредственно изcmd.exe
дает один и тот же результат, поэтому ни Windows Console, ни Vim не являются проблемой. Следующее, что могло вызвать эту ошибку, былоdot.exe
само по себе. Я подозревал, что он просто не знает, как правильно обрабатывать закодированные аргументы Unicode, как это делают даже не все консольные команды:https://ss64.com/nt/chcp.html
Я искал в Интернете, есть ли поддержка Unicode в GraphViz и обнаружил, что он поддерживает файлы Unicode, но ничего о поддержке Unicode для имен файлов. На трекере ошибок GraphViz и в сообщениях на форуме я не нашел никаких сообщений о том, что кто-то еще заинтересован в чтении файла с именами Unicode. Так что я посмотрел в источнике. Вот как
dot.exe
выглядит точка входа:graphviz-2.40.1\cmd\dot\dot.c
Следуя
argv
вниз по кроличьей норе:graphviz-2.40.1\lib\common\args.c
graphviz-2.40.1\lib\common\input.c
И наконец
graphviz-2.40.1\lib\common\input.c
Как утверждает MDSN:
К сожалению, единственный вариант - переименовать файл.
источник