Nei*_*gan 13 powershell byte-order-mark utf-8 powershell-4.0
创建一个文件utf8.txt.确保编码为UTF-8(无BOM).将其内容设置为€
在cmd.exe:
type utf8.txt > out.txt
内容out.txt是€
在PowerShell(v4)中:
cat .\utf8.txt > out.txt
要么
type .\utf8.txt > out.txt
Out.txt内容是 €
如何全局使PowerShell正常工作?
mkl*_*nt0 15
与底层.NET框架[1]不同,Windows PowerShell 使用以下默认值:
上输入:文件没有BOM(字节顺序标记)被假定为在系统的默认编码,这是遗留 Windows代码页("ANSI"代码页:活性,特定文化的单字节编码,配置通过控制面板).
在输出上:>和>>重定向操作符默认生成UTF-16 LE文件(它们有 - 并且需要 - 一个BOM).
文件消耗和生成cmdlet 通常支持-Encoding允许您显式指定编码的参数.
在PowerShell v5.1之前,Out-File显式使用底层cmdlet是更改编码的唯一方法.
在PowerShell v5.1 +中,>并>>成为有效的别名Out-File,允许您更改>和>>通过$PSDefaultParameterValues首选项变量的编码行为; 例如:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'.
要使PowerShell正确处理UTF-8,您必须将其指定为输入和输出编码[2] ,但请注意,在输出时,PowerShell 总是会向UTF-8文件添加BOM.
适用于您的示例:
Get-Content -Encoding utf8 .\utf8.txt | Out-File -Encoding utf8 out.txt
Run Code Online (Sandbox Code Playgroud)
要在PowerShell中创建没有 BOM 的UTF-8文件,请参阅我的这个答案.
相比之下,PowerShell Core是PowerShell的跨平台版本,幸运的是在输入和输出上默认使用无BOM的 UTF-8.
[1] .NET框架默认使用UTF-8,用于输入和输出.
这是有意的 - PowerShell与它构建的.NET框架之间的行为差异是不寻常的.
Get-Content但是,[2] 会自动识别带有 BOM的UTF-8文件.
| 归档时间: |
|
| 查看次数: |
7073 次 |
| 最近记录: |