如何批量保存csv文件的UTF-8?

时间:2019-04-30 08:36:28

标签: powershell csv utf-8

嗨,Stackoverflow社区!

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

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

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

这应该批量执行,否则我可以手动搜索和替换值。

2 个答案:

答案 0 :(得分:0)

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

根据文档:

  

-Encoding

     

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

     

此参数可接受的值如下:

     
      
  • ASCII:使用ASCII(7位)字符集的编码。
  •   
  • BigEndianUnicode:使用big-endian字节顺序以UTF-16格式编码。
  •   
  • OEM:对MS-DOS和控制台程序使用默认编码。
  •   
  • Unicode:使用小尾数字节顺序以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”)。有关更多信息,请参见.NET文档中的Encoding.CodePage。

答案 1 :(得分:0)

不幸的是,外文件或“>”或“ >>”默认为“ unicode”或utf16编码。您甚至可以在同一文件中使用“ >>”或“ out-file -append”混合两种编码。您可以改用set-content或“ out-file -encoding utf8”。实际上,设置内容默认为ansi编码。但是没有特殊字符,它将与utf8相同(不带bom),或者您也可以将-encoding选项与set-content一起使用。记事本默认为ansi,但即使没有bom或编码签名,也可以识别utf8或unicode。

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