相关文章推荐
气宇轩昂的领带  ·  cv::Mat与unsigned ...·  1 年前    · 

修改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关于配置文件的文档:

编辑于 2021-10-13 23:08

文章被以下专栏收录