Windows11中pandoc转换含Unicode字符名文件报No such file or directory错误
Windows 11下pandoc无法识别Unicode文件名的解决方法
问题原因
报错本质是两个Windows终端的兼容问题导致的:
- 命令中使用了单引号包裹文件路径,Windows原生的CMD、PowerShell不把单引号识别为字符串边界符,会直接把单引号算成文件名的一部分,还会把带空格、特殊字符的路径从特殊字符位置拆碎,才会出现报错信息里半截带乱码、带多余单引号的无效路径。
- Windows终端默认使用GBK系列代码页,不是UTF-8编码,传递Unicode字符文件名的时候会直接出现编码错乱,pandoc拿到的路径和实际文件名对不上。
另外你看到的[WARNING] Could not deduce format from file extension警告,也是因为路径被拆碎后pandoc识别不到正确的文件后缀触发的,路径传对之后这个警告会自动消失。
操作步骤
- 临时生效方案(无需修改系统设置,单次使用)
- 打开执行pandoc命令的终端,先执行
chcp 65001,把当前终端会话的代码页切换为UTF-8,避免Unicode字符传参乱码。 - 把命令里包裹文件名的单引号全部换成英文双引号,注意命令里的文件名要和本地实际存储的文件名完全一致(原命令里的
─¢是之前乱码产生的错误字符,不要直接使用,要替换成文件名里实际的正确Unicode字符,比如对应捷克语的ě),修正后的命令参考:
pandoc -f markdown_phpextra -o "Ahoj světe.html" "Ahoj světe.md"- 执行修正后的命令即可正常完成转换。
- 打开执行pandoc命令的终端,先执行
- 永久生效方案
打开Windows设置-时间和语言-语言和区域-管理语言设置,点击「更改系统区域设置」,勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,确认后重启电脑,之后终端默认使用UTF-8编码,不用每次手动执行chcp命令切换,直接用双引号包裹路径就能正常识别带Unicode字符的文件名。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

