我有一个用 atom 创建的 html 文件 test.html,其中包含:
Testé encoding utf-8
当我使用 Powershell 控制台阅读时(我使用的是法语 Windows)
Get-Content -Raw test.html
我回来了:
Testé encoding utf-8
为什么重音字符不能正确打印?
最佳答案
Atom editor创建 UTF-8 文件没有 pseudo-BOM 默认情况下(从跨平台的角度来看,这是正确的做法)。
- 其他流行的跨平台编辑器,例如 Visual Studio Code和 Sublime Text , 行为方式相同。
Windows PowerShell[1] 仅识别 带有伪 BOM 的 UTF-8 文件。
- 在没有伪 BOM 的情况下,PowerShell 将文件解释为根据系统的旧 ANSI 代码页进行格式化,例如 Windows-1252例如,在美国系统上。
(这也是记事本使用的默认编码,它称为“ANSI”,不仅在读取文件时,而且在创建文件时也是如此。Windows PowerShell 的Get-Content
/Set-Content
(这里的编码称为Default
并且是实际的默认值,因此不需要指定);相比之下,Out-File
/>
创建 默认情况下 UTF-16LE 编码的文件(Unicode
)。)
- 在没有伪 BOM 的情况下,PowerShell 将文件解释为根据系统的旧 ANSI 代码页进行格式化,例如 Windows-1252例如,在美国系统上。
因此,为了让 Get-Content
在 Windows PowerShell 中正确识别 BOM-less UTF-8 文件,您必须 < strong>使用 -Encoding utf8
.
[1] 相比之下,跨平台的 PowerShell Core值得称赞的版本默认为 UTF-8,在 cmdlet 中始终如一地读取和写入,因此即使没有 BOM,它也能正确解释 UTF-8 编码的文件,并且默认情况下也会创建没有 BOM 的文件。
关于Powershell 和 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42542560/