嗨Stackoverflow社区!
我有一些值为"{Null}“和"Null”的.csv文件。我使用一个带有PowerShell函数批处理文件(.cmd)将这些值替换为"“。问题是输出文件具有与输入文件(UTF-8)不同的编码(utf-16le)。有没有办法保留原始编码?
powershell -Command "(gc myfile.csv) -replace '{NULL}', '' | Out-File myfile_replaced.csv"
我试图找到一个解决方案,并了解到,记事本默认使用UTF-16le编码。从理论上讲,我可以更改Notepad++的编码,但这不是一个选项,因为代码应该与其他人共享。
这应该是批量实现的,否则我可以手动搜索和替换这些值。
发布于 2019-04-30 18:47:53
Out-File
支持使用-Encoding
作为参数。对于写入文件的各种其他cmdlet(例如Export-Csv
)也是如此。
根据文档:
-Encoding
指定导出的CSV文件的编码。默认值为UTF8NoBOM。
此参数的可接受值如下:
使用大端字节顺序的UTF-16格式的set.
从Windows6.2开始,Encoding参数还允许注册代码页的数字ID(如Windows1251)或注册代码页的字符串名称(如-Encoding“-Encoding -1251”)。有关详细信息,请参阅Encoding.CodePage的.NET文档。
发布于 2019-04-30 20:34:10
不幸的是,输出文件或">“或">>”缺省为"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"
https://stackoverflow.com/questions/55916930
复制相似问题