rwa*_*ace 70 powershell utf-8 character-encoding
默认情况下,当您将命令的输出重定向到文件或将其传递到PowerShell中的其他内容时,编码为UTF-16,这是无用的.我想把它改成UTF-8.
它可以通过替换>foo.txt语法来逐个进行,| out-file foo.txt -encoding utf8但是每次都必须重复这是很尴尬的.
在PowerShell中设置内容的持久方法是将它们放入\Users\me\Documents\WindowsPowerShell\profile.ps1; 我已经验证这个文件确实是在启动时执行的.
有人说输出编码可以设置,$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}但我已经尝试过,它没有任何效果.
https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/谈到$OutputEncoding乍一看似乎应该是相关的,但后来谈到输出被编码在ASCII中,这不是实际发生的事情.
如何设置PowerShell使用UTF-8?
mkl*_*nt0 108
在PSv5.1或更高,其中>和>>是有效的别名Out-File,你可以设置默认的编码>/ >>/ Out-File通过$PSDefaultParameterValues选项变量:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'在PSv5.0或更低版本上,您无法更改>/ 的编码>>,但是,在PSv3或更高版本上,上述技术适用于调用Out-File.
($PSDefaultParameterValues偏好变量是在PSv3.0中引入的).
在PSv3.0或更高,如果你想设置的默认编码为所有支持的cmdlet
的-Encoding参数(在PSv5.1 +包括>和>>),使用:
$PSDefaultParameterValues['*:Encoding'] = 'utf8'如果将此命令放在您的$PROFILE cmdlet中,Out-File并且Set-Content默认情况下将使用UTF-8编码,但请注意,这使其成为会话全局设置,将影响未明确指定编码的所有命令/脚本.
同样,请确保在您希望以相同方式运行的脚本或模块中包含此类命令,以便即使在由其他用户或其他计算机运行时它们的行为也确实相同.
警告:PowerShell,从v5.1开始,总是使用(伪)BOM创建UTF-8文件,这通常只在Windows世界中使用 - 基于Unix的实用程序无法识别此BOM(见底部).
自动$OutputEncoding变量不相关,仅适用于PowerShell与外部程序通信的方式(PowerShell在向其发送字符串时使用的编码方式) - 它与输出重定向运算符和PowerShell cmdlet用于保存到文件的编码无关.
PowerShell现在是跨平台的,通过其PowerShell 核心版本,其编码 - 合理 - 默认为无BOM的UTF-8,与类Unix平台一致.
这意味着没有BOM的源代码文件被假定为UTF-8,并且使用>/ Out-File/ Set-Content默认为无BOM的 UTF-8; 明确使用utf8 -Encoding参数也会创建无BOM的 UTF-8,但您可以选择使用伪BOM 创建带有utf8bom值的文件.
如果您在类似Unix的平台上使用编辑器创建PowerShell脚本,现在甚至在具有跨平台编辑器(如Visual Studio Code和Sublime Text)的Windows上创建PowerShell脚本,生成的*.ps1文件通常不会具有UTF-8伪BOM:
相反,文件做有UTF-8的伪BOM可以在类Unix平台有问题的,因为它们会导致Unix工具,例如cat,sed和awk-甚至一些编辑器,例如gedit-到通过传递伪BOM,即将其视为数据.
bash时,例如,text=$(cat file)或text=$(<file)- 结果变量将包含伪BOM作为前3个字节.| 归档时间: |
|
| 查看次数: |
80259 次 |
| 最近记录: |