选择文件编码时,新增“UTF-8(BOM)”选项
ilcpm opened this issue · comments
问题是从“运行脚本”功能来的
Windows自带的PowerShell版本是5,对应的运行命令是powershell,默认.ps1脚本编码为ANSI
安装PowerShell 7之后,对应的运行命令为pwsh,默认.ps1的脚本编码为utf-8
安装PowerShell 7之后,quicker调用执行.ps1脚本的终端为PowerShell 7(pwsh),故在使用“系统默认编码”时会出现乱码
详见下图
( 补充一下,终端里的活动代码页就是中文环境对应的936,并非UTF-8对应的65001)
所以,我不建议使用ANSI这种不严谨的格式来作为脚本的编码,
对于PowerShell,带BOM头的UTF-8可以被完美的支持
对于cmd,手动在bat文件之前加上chcp 65001也可以解决问题(该方案对于.ps1文件无效)
所以希望能够在文件编码的列表里增加UTF-8(BOM)选项,避免PowerShell的编码问题
个人使用的时候手动调整一下就好了,但是在共享给别人或者使用别人共享的动作时,这个问题可能会带来很严重的后果,比如用PowerShell写的批量重命名文件功能……一旦出错后悔药都没有
另外GB2312应该不能用来代表中文的默认编码,根据我之前了解到的信息,2312所在的年代简体字标准都还没完全确定下来,比如“瞭望塔”的“瞭”字里面是没有收录的,那个时候写的是“了望”,下图是仿宋GB2312的所有“liao”的读音下的文字
从维基百科看,微软的2312似乎是个GBK的子集?所以正常在Windows里“瞭”这个字还是能打出来
https://zh.wikipedia.org/zh-cn/GB_2312#%E4%B8%A4%E7%A7%8D%E4%B8%8D%E5%90%8C%E7%9A%84GB/T_2312%E5%AE%9E%E7%8E%B0
然后中文现在最全的编码应该是GB18030,至于Windows默认用的到底是GBK还是18030具体没去深究
我的意思是说,装了PowerShell 7之后,虽然换成utf8就解决问题了
但是把动作分享给别人,或者安装别人的动作的时候,如果里面有PowerShell脚本,那就还是可能出现乱码,因为你没办法预知对方电脑的PowerShell版本……
PowerShell 5,默认把ps1当做ANSI看待,PowerShell 7默认当做UTF8对待
所以最好的方案就是对PowerShell脚本使用UTF8(BOM)编码,这样两个版本的PowerShell都不会有问题
对应的我认为quicker的改进方案就是增加UTF8(BOM)做为文件编码
@ilcpm 测试了一下,utf8编码默认就会带BOM了
验证方法: 运行脚本后,用everything搜索ps1文件,找到quicker-xxxx.ps1这个临时脚本文件,使用vscode等编辑器打开,可以看到文件编码格式。使用二进制方式打开可以看到标记字符
是的,cmd那边带上chcp 65001就可以用utf8了,至于bom头的问题我不清楚win10win11是否有区别
但总之,我的想法就是说在“文件编码”的选项里区分开utf8和utf8(bom),细化成这两个,这样大家都可以根据自己的情况选择到合适的编码了,并且可以极大的提高对不同系统环境的适应性
目前测试的情况,对于现有的这些脚本类型,使用不使用BOM效果都一样,增加额外的选项反而会造成一定的疑惑。感觉还是不加为好。
目前测试的情况,对于现有的这些脚本类型,使用不使用BOM效果都一样,增加额外的选项反而会造成一定的疑惑。感觉还是不加为好。
我觉得还是需要加上的,就算PowerShell和cmd的问题解决了,对于“自定义脚本”来说,也是未知的,有的软件可以处理bom头,有的软件用utf8就不支持bom头,所以要么就写清楚这是有bom头的,要么就做成两个选项