2017-08-17 48 views
0

我有一个脚本,它处理来自文件的数据并根据条件将结果写入txt。鉴于数据是字符串,如“Distribución”或“México”。处理后,像“é”和“ó”这样的特殊字符被破坏(典型的白色方块或问号)。Powershell Out-file特殊字符

我如何编码输出文件,使其与这些字符工作?我尝试在没有BOM的Utf8,utf8编码,它不起作用。这里是一个文件写入行:

...| Out-file -encoding XXX .\result.txt 

在XXX,我试图ASCII,UTF8,没有什么工作:/

+0

您用来读取结果文件的哪个应用程序?也许它的默认字体不包含适当的字符,所以你得到的是实体占位符。使用十六进制编辑器查看结果文件中的确切内容。 – vonPryz

+0

以UTF8编码导入文件,处理并导出UTF8编码。 –

+0

@AdamMnich我有这样一条线来导入:$ FirstFile = Import-Csv -Delimiter';' - 编码UTF8 $ FirstPath | Select-Object -ExpandProperty Url它给了我“一个参数不能找到匹配参数'编码'”。 FirstPath是一个文件的路径 – Wolwgang

回答

0

出文件将始终会添加一个BOM。这是该Cmdlet特别恼人的“特征”。不幸的是 - 据我所知,没有快速的方法来使用UTF8保存文件,而无需使用PowerShell中的BOM。但是,您可以利用.Net来执行此操作。这不是真正的生产做好准备,但这里有一个简单的例子:

$outputPath = "D:\temp.txt" 
$data = "Distribución or México" 
[System.IO.File]::WriteAllLines($outputPath, $data) 

包装在cmdlet,函数和/或模块,以使其可重复使用。当然,你也可以通过.Net更多地控制文件编码。