Windows 7下rdiff.exe处理Unicode文件名命令参数失败问题
解决rdiff在Windows 7 CMD中无法处理Unicode文件名的问题
这个问题我之前帮别人排查过,核心原因是Windows命令提示符(CMD)的默认编码和Cygwin编译的rdiff程序期望的编码不兼容——rdiff作为依赖cygwin1.dll的程序,默认用UTF-8编码处理文件名,但Windows 7的CMD默认使用系统本地代码页(比如泰文系统是874,中文是936),导致Unicode文件名传递到rdiff时出现乱码,程序无法正确识别文件。
给你几个可行的解决办法:
方法一:切换CMD到UTF-8编码执行命令
- 打开CMD窗口,先执行命令切换编码为UTF-8:
chcp 65001 - 右键点击CMD窗口标题栏,选择「属性」→「字体」,把字体改成Consolas或Lucida Console(这两种字体支持UTF-8字符显示);
- 导航到文件所在目录,重新执行你的rdiff命令:
rdiff -b 10240 signature "ฉันเจ็บ.txt" "ฉันเจ็บ.sig"
方法二:使用Cygwin终端替代CMD
既然rdiff依赖cygwin1.dll,直接用Cygwin自带的终端会更省心:
- 打开Cygwin Terminal(安装Cygwin时会自动添加到开始菜单);
- 用
cd命令导航到文件所在的Windows目录(比如文件在D盘的test文件夹,就输入cd /cygdrive/d/test); - 执行同样的rdiff命令即可,Cygwin终端默认支持UTF-8,能完美识别Unicode文件名。
方法三:用cygpath转换文件名路径(适合必须用CMD的场景)
如果一定要在CMD里操作,可以用Cygwin提供的cygpath工具把Windows格式的Unicode文件名转换成Cygwin能识别的POSIX格式:
- 确保
cygpath.exe和rdiff、cygwin1.dll在同一个目录,或者已经添加到系统环境变量; - 先转换文件名:
执行后会得到类似cygpath -u "ฉันเจ็บ.txt" cygpath -u "ฉันเจ็บ.sig"/cygdrive/d/test/ฉันเจ็บ.txt的路径; - 用转换后的路径执行rdiff命令:
rdiff -b 10240 signature "/cygdrive/d/test/ฉันเจ็บ.txt" "/cygdrive/d/test/ฉันเจ็บ.sig"
内容的提问来源于stack exchange,提问作者Aura
相关产品推荐
相关产品推荐

