Eksperymentowałem ze schematem DOT i próbowałem wykonać następujące czynności:
:! dot -Tpng -oFab.png %
ó
Wystąpił błąd, ponieważ moja nazwa pliku ma znak specjalny („ ” w „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...
Jak widać, znak specjalny zmienia się na „ ├│
”. Dzieje się tak z vimem i gVimiem 7.4 pod Win7 i NTFS, więc zakładam, że nazwa pliku to UTF16 . Zakładam również, że podczas wywoływania powłoki / cmd nazwa pliku jest interpretowana jako inne kodowanie (dzięki Carpetsmoker za wskazanie, domyślnie jest to strona kodowa 850 ).
Jak mogę to naprawić?
Jasne, mogę po prostu zmienić nazwę pliku, ale chciałbym wiedzieć, dlaczego tak się dzieje i jak to naprawić.
Aktualizacja : Właśnie znalazłem to pytanie w superuser.SE (dzięki opinii @ ChristianBrabandt ), ale wydaje się, że to również nie pomaga.
cmd
akceptuje nazwę pliku, ale instalowanie środowiska podobnego do Uniksa byłoby moją preferowaną obsługą.cmd.exe
nie jest Unicode, ale strona kodowa 850 . Zobacz także tę odpowiedź .Odpowiedzi:
Krótka odpowiedź
Problem leży w
dot.exe
. GraphViz może otwierać pliki ze ścieżkami Unicode w systemie Linux, ale nie w systemie Windows, chyba że (być może), jeśli jest skompilowany z Visual Studio 2005.Badania
Strona kodowa jest ustawiona na
850
, kodowanie Vim naUTF-8
.Nie podaje dokładnie tego samego błędu, ale
dot.exe
wydaje się, że otrzymuje niewłaściwy argument. Próbowałem przekazać tę samą nazwę pliku do innego programu.I zadziałało w sam raz. Wykonanie obu
dot.exe
itype
bezpośrednio zcmd.exe
tego samego wyniku daje taki sam wynik, więc ani konsola Windows, ani Vim nie stanowią problemu. Następną rzeczą, która mogła spowodować ten błąd, byładot.exe
sama. Podejrzewałem, że po prostu nie wie, jak poprawnie obsługiwać argumenty zakodowane w Unicode, ponieważ nawet nie wszystkie polecenia konsoli:https://ss64.com/nt/chcp.html
Szukałem w Internecie, czy w GraphViz istnieje obsługa Unicode i okazało się, że obsługuje ona pliki Unicode , ale nic na temat obsługi plików Unicode. Ani nie znalazłem żadnych raportów na temat narzędzia do śledzenia błędów GraphViz ani postów na forum o tym, że ktoś jest zainteresowany czytaniem pliku o nazwie Unicode. Sprawdziłem to w źródle. Oto jak
dot.exe
wygląda punkt wejścia:graphviz-2.40.1\cmd\dot\dot.c
W
argv
dół króliczej nory:graphviz-2.40.1\lib\common\args.c
graphviz-2.40.1\lib\common\input.c
I na koniec
graphviz-2.40.1\lib\common\input.c
Jak stwierdza MDSN:
Niestety jedyną dostępną opcją jest zmiana nazwy pliku.
źródło