powershell - 如何为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++ 的编码,但这不是一个选项,因为代码应该与其他人共享。
这应该在批处理中实现,否则我可以手动搜索和替换值。
解决方案
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 文档。