修改PowerShell输出字符串的默认编码
PowerShell(以下简称PS)还真是个麻烦的家伙~
今天在使用PySide6-uic转换ui文件的时候,发现转换出来的py文件报错,一番查找之后,发现是PS输出的字符串的编码问题,当然也是很快地找到了解决方案(PS的文档是真的全)。
默认情况下,使用>符号输出文件时,比如常用的pip freeze > requirements.txt。PS会输出编码为UTF-16LE的文件。使用VS code或其他工具可以看得到:
然后就导致了报错。
还是utf-8最靠谱。
解决方案也很简单,文档里有现成的解决办法[1]:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
但是注意啦,注意,使用上述命令后,再输出的文件其实是带有BOM头的utf-8文件,并非纯utf-8文件,如果需要输出纯utf-8编码的文件,可以修改一下上述命令:
$PSDefaultParameterValues['Out-File:Encoding'] = 'Default'
但是问题还是存在,当我们关闭PS窗口,重新再打开一个的时候,输出文件编码又变回去了!
这是因为上述命令只会修改当前会话窗口的设置,如果想永久修改,还需要将配置写入PS的配置文件[2]。
这里我创建一个当前用户,当前主机的配置文件,文档中说,这个文件在:
$Home\[My ]Documents\PowerShell\Microsoft.PowerShell_profile.ps1
这里...
其实就是:
C:\Users\你的用户名\Documents\WindowsPowerShell
如果不确定$Home的具体路径,可以打开一个PS窗口,直接执行$Home就好。
然后我们创建一个名为:Microsoft.PowerShell_profile.ps1 的文件,输入并保存上面提到的命令即可,这样就可以在所有的PS窗口应用我们的设置啦~
参考资料:
[1]:PS关于字符编码的文档:
[2]:PS关于配置文件的文档: