netspirit 发表于 2020-9-19 02:47

python执行外部命令遇到特殊字符的路径会乱码怎么办?

本帖最后由 netspirit 于 2020-9-19 03:06 编辑

我试过通过python调用一个命令行图片压缩工具压缩图片
但是我遇到了一个问题:多国语言和特殊符号的路径在调用时会变成乱码

比如:
我执行convert.exe -resize 1000x1000 -quality 0 "f:\藤田恵美 - 2010 - 藤田恵美・Le Couple Best\pic.jpg" c:\xxxxx1.jpg
convert.exe: unable to open image `F:\����{�� - 2010 - ����{��?Le Couple Best\pic.jpg': Invalid argument

(上面实际路径更长 我为了方便看写得简单了一些)
因为中间有个・结果就一直出错
我试了一些方法 包括os.system subprocess.call win32api.ShellExecute 都会遇到这个问题


怎样才能让程序就算遇到特殊路径也能正常执行命令啊?


测试了一下在命令行里面执行也会出错 貌似这种中文字符或者日文字符根本就不能出现在命令行?

FAIL formats: can't open input file F:\藤田恵美 - 2017 - 東京ロンリー?ナイト\東京ロンリー?ナイト - 藤田恵美.flac': Invalid argument


就一个中文/日文的点 看来吾爱破解也显示不出来啊

chen4321 发表于 2020-9-19 07:41

加上“ ”
简单来说就是最后还是要调用cmd

fortytwo 发表于 2020-9-19 07:44

尝试用列表遍历该文件夹下文件,看返回的文件名是什么,根据那个文件名去操作文件吧。这个是我的解决思路。要不就找找片假名过滤的python demo 应该是比较好找的(我找过Windows文件命名规则过滤的,虽然写起来简单但是命名规则一个个去输入还是挺麻烦的)

netspirit 发表于 2020-9-19 07:58

chen4321 发表于 2020-9-19 07:41
加上“ ”
简单来说就是最后还是要调用cmd

经过测试cmd下面遇到这个中文的的点也会导致文件路径无法识别 一直都加了引号的 没用

netspirit 发表于 2020-9-19 07:59

SailZhao520 发表于 2020-9-19 07:44
尝试用列表遍历该文件夹下文件,看返回的文件名是什么,根据那个文件名去操作文件吧。这个是我的解决思路。 ...

实测python自己的命令都可以正常操作 但是所有调用操作系统的操作那个文件的 就不能识别路径 比如 os.system和win32api
但是我需要调用外部exe打到某种功能啊。。。。

yike911 发表于 2020-9-19 09:15

netspirit 发表于 2020-9-19 09:49

yike911 发表于 2020-9-19 09:15
有些字符是非法的,需要过滤。。。

过滤了那怎么使用命令啊 比如我用命令行压缩图片 但是图片路径有特殊字符 如果把特殊字符过滤了那不就找不到文件了....

夏日已末 发表于 2020-9-19 09:49

在引号前面加个r试试看,例如r"c:\xxxxx1.jpg"

倾情 发表于 2020-9-19 09:58

1、可以用正则进行格式化之后再写入
2、加上反斜杠“c:\\Desktop\\xxx\\xx”
3、加上禁止转义字符r"c:\Desktop\xxx\xx"

netspirit 发表于 2020-9-19 10:00

夏日已末 发表于 2020-9-19 09:49
在引号前面加个r试试看,例如r"c:\xxxxx1.jpg"

感谢回答 我不仅这些方法都试过了 甚至直接在cmd里面输入过那条命令 结果路径识别失败 就是转换有特殊字符路径下的jpg文件
页: [1] 2
查看完整版本: python执行外部命令遇到特殊字符的路径会乱码怎么办?