如何在PowerShell中正确/全局分类UTF-8(无BOM)文件?(转到另一个文件)
创建一个文件如何在PowerShell中正确/全局分类UTF-8(无BOM)文件?(转到另一个文件),powershell,utf-8,powershell-4.0,byte-order-mark,Powershell,Utf 8,Powershell 4.0,Byte Order Mark,创建一个文件utf8.txt。确保编码为UTF-8(无BOM)。将其内容设置为€ 在cmd.exe中: 键入utf8.txt>out.txt out.txt的内容是€ 在PowerShell(v4)中: cat.\utf8.txt>out.txt 或 类型。\utf8.txt>out.txt Out.txt的内容是 如何在全局范围内使PowerShell正常工作?注意:此答案是关于Windows PowerShell(直到v5.1)PowerShell[Core,v6+],PowerShell的
utf8.txt
。确保编码为UTF-8(无BOM)。将其内容设置为€
在cmd.exe
中:
键入utf8.txt>out.txt
out.txt的内容是€
在PowerShell(v4)中:
cat.\utf8.txt>out.txt
或
类型。\utf8.txt>out.txt
Out.txt的内容是
如何在全局范围内使PowerShell正常工作?注意:此答案是关于Windows PowerShell(直到v5.1)PowerShell[Core,v6+],PowerShell的跨平台版本,现在幸运的是在输入和输出上都默认为无BOM的UTF-8
Windows PowerShell,与底层的.NET框架不同[1]
,使用以下默认值:
- 输入时:不带BOM(字节顺序标记)的文件假定为系统默认编码
,这是传统的()(“ANSI”代码页:活动的、特定于区域性的单字节编码,通过控制面板配置)
输出时:默认情况下,
和>
重定向操作符生成UTF-16 LE文件(这些文件确实具有并且需要BOM)
文件使用和生成cmdlet通常支持-Encoding
参数,该参数允许您显式指定编码。
在Windows PowerShell v5.1之前,明确使用底层的Out文件
cmdlet是更改编码的唯一方法。
在Windows PowerShell v5.1+,
和>
成为输出文件的有效别名
,允许您通过$PSDefaultParameterValues
首选项变量更改
和>
的编码行为;e、 g.:
$PSDefaultParameterValues['Out-File:Encoding']='utf8'
要使Windows PowerShell正确处理UTF-8,必须将其指定为输入和输出编码[2]
,但请注意,在输出时,PowerShell总是将BOM添加到UTF-8文件。
适用于您的示例:
Get-Content -Encoding utf8 .\utf8.txt | Out-File -Encoding utf8 out.txt
要在PowerShell中创建没有BOM表的UTF-8文件,请参阅我的
[1] .NET Framework默认使用(无BOM)UTF-8进行输入和输出。
Windows PowerShell和它所构建的框架之间的这种故意的行为差异是不寻常的。PowerShell[Core]v6+中的差异消失了:.NET[Core]和PowerShell[Core]都默认为无BOM的UTF-8
[2] 获取内容
会自动识别带有BOM表的UTF-8文件。对于PowerShell 5.1,启用此设置:
控制面板,区域,管理,更改系统区域设置,使用Unicode UTF-8
全球语言支持
然后将其输入PowerShell:
$PSDefaultParameterValues['*:Encoding'] = 'Default'
或者,您可以升级到PowerShell 6或更高版本