Ich habe mit einem DOT-Diagramm experimentiert und versucht, Folgendes zu tun:
:! dot -Tpng -oFab.png %
Ich habe eine Fehlermeldung erhalten, weil mein Dateiname ein Sonderzeichen hat (" ó
" in "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...
Wie Sie sehen können, wird das Sonderzeichen für " ├│
" geändert . Dies ist mit vim und gVim 7.4 unter Win7 und NTFS, daher gehe ich davon aus, dass der Dateiname in UTF16 ist . Ich gehe auch davon aus, dass beim Aufrufen der Shell / cmd der Dateiname als eine andere Codierung interpretiert wird (danke an Carpetsmoker für den Hinweis, dass standardmäßig Codepage 850 verwendet wird ).
Wie kann ich das beheben?
Natürlich kann ich die Datei einfach umbenennen, aber ich möchte wissen, warum dies passiert und wie ich es korrigieren kann.
Update : Ich habe diese Frage gerade in superuser.SE gefunden (dank des Feedbacks von @ ChristianBrabandt ), aber es scheint auch nicht zu helfen.
cmd
den Dateinamen akzeptiert. Die Installation einer Unix-ähnlichen Umgebung wäre jedoch meine bevorzugte Vorgehensweise.cmd.exe
nicht Unicode, sondern Codepage 850 . Siehe auch diese Antwort .Antworten:
Kurze Antwort
Das Problem liegt in
dot.exe
. GraphViz kann Dateien mit Unicode-Pfaden unter Linux öffnen, jedoch nicht unter Windows, es sei denn (möglicherweise), wenn es mit Visual Studio 2005 kompiliert wurde.Forschung
Die Codepage ist auf
850
Vim-Codierung eingestelltUTF-8
.Es gibt nicht genau den gleichen Fehler, aber der
dot.exe
scheint ein falsches Argument zu erhalten. Ich habe versucht, den gleichen Dateinamen an das andere Programm zu übergeben.Und es hat genau richtig funktioniert. Das Ausführen von beiden
dot.exe
undtype
direkt voncmd.exe
führt zu demselben Ergebnis, sodass weder die Windows-Konsole noch Vim das Problem sind. Das nächste, was diesen Fehler verursachen konnte, war sichdot.exe
selbst. Mein Verdacht war, dass es einfach nicht weiß, wie man mit den Unicode-codierten Argumenten richtig umgeht, wie es nicht einmal alle Konsolenbefehle tun:https://ss64.com/nt/chcp.html
Ich habe im Web gesucht, ob Unicode in GraphViz unterstützt wird, und festgestellt, dass es Unicode- Dateien unterstützt, aber nichts über die Unicode-Unterstützung für die Dateinamen. Weder habe ich Berichte über den GraphViz-Bug-Tracker noch Beiträge im Forum über andere Personen gefunden, die daran interessiert sind, eine Unicode-Datei mit dem Namen zu lesen. Also habe ich es in der Quelle nachgeschlagen. Hier
dot.exe
sieht der Einstiegspunkt aus:graphviz-2.40.1\cmd\dot\dot.c
Folgen
argv
Sie dem Kaninchenbau:graphviz-2.40.1\lib\common\args.c
graphviz-2.40.1\lib\common\input.c
Und schließlich
graphviz-2.40.1\lib\common\input.c
Wie der MDSN feststellt:
Leider besteht die einzige Möglichkeit darin, die Datei umzubenennen.
quelle