嗨,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 ++的编码,但这不是一个选择,因为该代码应该与其他人共享。
这应该批量执行,否则我可以手动搜索和替换值。
答案 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"