【发布时间】:2019-04-30 08:36:28
【问题描述】:
你好 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时,告诉它你想要什么编码,如果使用powershell的pre v6,你可以使用以下任何一个,ASCII,BigEndianUnicode,OEM,Unicode,UTF7、UTF8、UTF8BOM、UTF8NoBOM和UTF32。在您的情况下,您似乎会使用 UTF8 之一,例如Out-File myfile_replaced.csv -Encoding UTF8. -
如果输入文件是 UTF8 编码的(没有 BOM),您还需要使用 Get-Content 指定编码。 Out-File 将不可避免地包含
-Encoding UTF8到 PSv5.1 的 BOM,@Compo 提到的-Encoding UTF8NoBOM特定于 PSv6+ -
我的评论应该是“pre v6.2”,但感谢您发现它@LotPings。
标签: powershell csv utf-8