Eu estava experimentando um diagrama do DOT e tentei fazer o seguinte:
:! dot -Tpng -oFab.png %
Ocorreu um erro porque meu nome de arquivo tem um caractere especial (" ó
" em "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...
Como você pode ver, o caractere especial está sendo alterado para " ├│
". Isso ocorre com o vim e o gVim 7.4 em Win7 e NTFS, portanto, presumo que o nome do arquivo esteja em UTF16 . Suponho também que, ao invocar o shell / cmd, o nome do arquivo esteja sendo interpretado como outra codificação (obrigado ao Carpetsmoker por apontar o padrão para a página de código 850 ).
Como posso consertar isso?
Claro, posso simplesmente renomear o arquivo, mas gostaria de saber por que isso acontece e como corrigi-lo.
Atualização : Acabei de encontrar esta pergunta no superuser.SE (graças ao feedback de @ ChristianBrabandt ), mas também não parece ajudar.
cmd
aceite o nome do arquivo, mas instalar um ambiente semelhante ao Unix seria o meu tratamento preferido.cmd.exe
não é unicode, mas página de código 850 . Veja também esta resposta .Respostas:
Resposta curta
O problema está
dot.exe
. O GraphViz pode abrir arquivos com caminhos Unicode no Linux, mas não no Windows, a menos que (talvez) se compilado com o Visual Studio 2005.Pesquisa
A página de código está definida como
850
, codificação Vim comoUTF-8
.Não dá exatamente o mesmo erro, mas
dot.exe
parece receber um argumento errado. Tentei passar o mesmo nome de arquivo para o outro programa.E funcionou perfeitamente. A execução de ambos
dot.exe
etype
diretamente decmd.exe
fornece o mesmo resultado, portanto, nem o Console do Windows nem o Vim são o problema. A próxima coisa que poderia causar esse erro foidot.exe
ela mesma. Minha suspeita era que ele simplesmente não sabia como lidar com os argumentos codificados em Unicode corretamente, como nem todos os comandos do console fazem:https://ss64.com/nt/chcp.html
Pesquisei na Web se há suporte para Unicode no GraphViz e descobri que ele suporta arquivos Unicode, mas nada sobre o suporte a Unicode para os nomes de arquivos. Também não encontrei nenhum relatório no rastreador de erros do GraphViz nem postagens no fórum sobre alguém mais interessado em ler um arquivo nomeado Unicode. Então eu procurei na fonte. Aqui está o que é o
dot.exe
ponto de entrada:graphviz-2.40.1\cmd\dot\dot.c
Seguindo
argv
pela toca do coelho:graphviz-2.40.1\lib\common\args.c
graphviz-2.40.1\lib\common\input.c
E finalmente
graphviz-2.40.1\lib\common\input.c
Como o MDSN afirma:
Infelizmente, a única opção existente é renomear o arquivo.
fonte