python 执行 Windows 命令行命令中文编码以及空格的问题(aapt python find findstr)

问题描述:

1. 命令行默认编码gbk,而aapt 获取 Androidmanifest.xml 文件编码为 utf-8

2. findstr 和 find 无法寻找utf-8编码的中文文本

3. 文件名路径中含有空格,subprocess.Popen 执行时报错,使用单引号框住在脚本执行时不起作用

问题解决:

1. 更改当前命令行编码,使得aapt获得的文本和命令行保持一致

CHCP 65001 # 更改当前命令行编码为 utf-8  对应的更改回gbk 为 CHCP 936

注意,这样之后,命令行显示中文可能会出问题,但是我们用脚本跑所以不碍事儿。不过如果临时使用命令行输入命令会有编码显示障碍,但是能忍受吧,只能说。
以下是命令行中编码障碍的例子
编码障碍的例子

2. 脚本中采用正则表达式匹配 findstr 和 find 无法寻找的utf-8编码的中文文本

直接aapt结果接着findstr会无法处理中文的情况,找了半天找到了一份说明
https://www.cnblogs.com/mq0036/p/13825890.html

(base) PS L:\Download\error> aapt dump badging .\58ͬ_com.wuba.apk | findstr  'application-label:'
application-label:'58???'

总结下就是findstr只能在gbk编码下查找中文,我们修改为utf-8编码的格式之后就不能使用了
怎么办,最后找了半天,脚本中使用正则表达式吧:

match_packgame = re.compile("package: name='(\S+)'").match(output.decode())
match_name = re.compile("application-label:'(.+)'").search(output.decode())

3. 使用数组参数,传入带有空格的中文命令

先说结论,用数组传每一个单独的参数,带有空格的命令仍然是一个参数,放在一起传进去即可。
在这里插入图片描述
然后记录一下寻找过程:

最后这个问题困扰我最久,一开始发现文件路径中带有中文,简单的使用单引号框起来路径,因为在命令行中这样就可以了,所以没有多想,最后一直报错才发现不对劲,开始寻找答案。
找啊找,找到了这个链接https://blog.csdn.net/ya6543/article/details/107774269,和我完全一样的问题,然后说再使用双引号括起来就能成功。

但我试了一下报错了:
python The filename, directory name, or volume label syntax is incorrect

可能是我没括对格式,但是我不想再试了,上面的链接说是从 StackOverflow上看到的解决方案,顺着点进链接https://stackoverflow.com/questions/49594738/not-able-to-parse-windows-path-with-space-in-python?newreg=6f5ff42a554343debcd90b7a291151ea

一大堆讨论不想看,但是拖到最后发现,结尾有人有一个方案:
在这里插入图片描述
试了一下,完美,成功了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值