Cygpath 和口音 (àèìòù)

Cygpath and accents (àèìòù)

cygpath 似乎无法正确处理带有重音符号的路径,例如

C:\cygwin64\bin>cygpath --absolute -C UTF8 "C:\foo\àòè\foo2"

打印

/usr/bin/"C:/foo/àòè/foo2"

而我希望:

/cygdrive/c/foo/àòè/foo2

没有重音符号的相同路径产生预期结果:

C:\cygwin64\bin>cygpath --absolute -C UTF8 "C:\foo\aoe\foo2"
/cygdrive/c/foo/aoe/foo2

我是不是做错了什么?

------ 编辑 1

我在 Win 10 上使用 Cygpath 2.6.0。

C:\cygwin64\bin>cygpath --version
cygpath (cygwin) 2.6.0
Path Conversion Utility
Copyright (C) 1998 - 2016 Cygwin Authors
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

C:\cygwin64\bin>locale
LANG=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=

据我所知,在 Adrian 回答之后,我认为问题是我试图在没有 运行 cygwin bash 的情况下使用 cygpath,因为使用它我没有任何问题。

$ cygpath --absolute -C UTF8 "C:\foo\àèò\foo2"
/cygdrive/c/foo/àèò/foo2

但是我需要直接使用cygpath而不需要bash,你觉得有办法吗?

你 运行 Cygwin/cygpath 是什么版本?我无法复制这个:

$ cygpath --absolute -C UTF8 "C:\foo\àòè\foo2"
/cygdrive/c/foo/àòè/foo2

$ cygpath --version
cygpath (cygwin) 1.7.35
Path Conversion Utility
Copyright (C) 1998 - 2015 Red Hat, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=en_US.UTF-8

编辑

作品:

  • cygpath-1.7.35mintty.exe (Cygwin)、cmd.exe 和 Powershell.
  • cygpath-2.6.0mintty.exe (Cygwin) 和 Powershell.

无效:

  • cygpath-2.6.0cmd.exe

这似乎与引用有关,并且有一个解决方法。指定不带引号的路径会产生正确的结果:

c:\cygwin\bin>cygpath --absolute -C UTF8 'C:\foo\àèò\foo2'
/cygdrive/c/cygwin/bin/'C:/foo/àèò/foo2'

c:\cygwin\bin>cygpath --absolute -C UTF8 C:\foo\àèò\foo2
/cygdrive/c/foo/àèò/foo2

我不确定 if/how Cygwin 开发人员是否支持 运行ning Cygwin Cygwin-shell 之外的应用程序,但是自从这在我说它是一个错误之前起作用了,你应该 post 它到他们的邮件列表。