Estaba experimentando con un diagrama DOT e intenté hacer lo siguiente:
:! dot -Tpng -oFab.png %
Recibí un error porque mi nombre de archivo tiene un carácter especial (" ó
" en "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 puede ver, el carácter especial se está cambiando por " ├│
". Esto es con vim y gVim 7.4 en Win7 y NTFS, por lo que supongo que el nombre de archivo está en UTF16 . También supongo que cuando se invoca el shell / cmd, el nombre del archivo se interpreta como alguna otra codificación (gracias a Carpetsmoker por señalar que el valor predeterminado es la página de códigos 850 ).
¿Cómo puedo arreglar esto?
Claro, simplemente puedo cambiar el nombre del archivo, pero me gustaría saber por qué sucede esto y cómo corregirlo.
Actualización : acabo de encontrar esta pregunta en superuser.SE (gracias a los comentarios de @ ChristianBrabandt ), pero tampoco parece ayudar.
cmd
acepte el nombre de archivo, pero instalar un entorno similar a Unix sería mi manejo preferido.cmd.exe
no es unicode, sino la página de códigos 850 . También vea esta respuesta .Respuestas:
Respuesta corta
El problema radica en
dot.exe
. GraphViz puede abrir archivos con rutas Unicode en Linux pero no Windows, a menos que (tal vez) si se compila con Visual Studio 2005.Investigación
La página de códigos está establecida en
850
, Vim codificando enUTF-8
.No da exactamente el mismo error, pero
dot.exe
parece recibir un argumento incorrecto. Intenté pasar el mismo nombre de archivo al otro programa.Y funcionó a la perfección. Ejecutar ambos
dot.exe
ytype
directamente desdecmd.exe
el mismo resultado, por lo que ni la consola de Windows ni Vim son el problema. Lo siguiente que pudo causar ese error fue endot.exe
sí mismo. Mi sospecha era que simplemente no sabe cómo manejar los argumentos codificados Unicode correctamente, ya que ni siquiera todos los comandos de la consola lo hacen:https://ss64.com/nt/chcp.html
Busqué en la web si hay soporte para Unicode en GraphViz y descubrí que sí admite archivos Unicode pero nada sobre el soporte Unicode para los nombres de archivo. Ni encontré ningún informe en el rastreador de errores GraphViz ni publicaciones en el foro sobre alguien más interesado en leer un archivo con nombre Unicode. Así que lo busqué en la fuente. Aquí se
dot.exe
ve el punto de entrada:graphviz-2.40.1\cmd\dot\dot.c
Siguiendo
argv
por la madriguera del conejo:graphviz-2.40.1\lib\common\args.c
graphviz-2.40.1\lib\common\input.c
Y finalmente
graphviz-2.40.1\lib\common\input.c
Como dice el MDSN:
Lamentablemente, la única opción es cambiar el nombre del archivo.
fuente