首页 > 解决方案 > 如何为csv文件批量保存UTF-8?

问题描述

嗨 Stackoverflow 社区!

我有一些值“{Null}”和“Null”的 .csv 文件。我使用带有 PowerShell 函数的批处理文件 (.cmd) 将这些值替换为“”。问题是输出文件的编码 (utf-16le) 与输入 (UTF-8) 不同。有没有办法保留原始编码?

powershell -Command "(gc myfile.csv) -replace '{NULL}', '' | Out-File myfile_replaced.csv"

我试图找到一个解决方案并理解,记事本默认具有 UTF-16le 编码。理论上,我可以更改 Notepad++ 的编码,但这不是一个选项,因为代码应该与其他人共享。

这应该在批处理中实现,否则我可以手动搜索和替换值。

标签: powershellcsvutf-8

解决方案


Out-File支持-Encoding作为参数使用。这对于编写文件(例如Export-Csv)的各种其他 cmdlet 也是如此。

根据文档:

-Encoding

指定导出的 CSV 文件的编码。默认值为 UTF8NoBOM。

此参数的可接受值如下:

  • ASCII:使用 ASCII(7 位)字符集的编码。
  • BigEndianUnicode:使用大端字节序以 UTF-16 格式编码。
  • OEM:对 MS-DOS 和控制台程序使用默认编码。
  • Unicode:使用 little-endian 字节顺序以 UTF-16 格式编码。
  • UTF7:以 UTF-7 格式编码。
  • UTF8:以 UTF-8 格式编码。
  • UTF8BOM:使用字节顺序标记 (BOM) 以 UTF-8 格式编码
  • UTF8NoBOM:以 UTF-8 格式编码,没有字节顺序标记 (BOM)
  • UTF32:以 UTF-32 格式编码。

从 PowerShell 6.2 开始,Encoding 参数还允许注册代码页的数字 ID(如 -Encoding 1251)或注册代码页的字符串名称(如 -Encoding "windows-1251")。有关详细信息,请参阅 Encoding.CodePage 的 .NET 文档。


推荐阅读