【问题标题】:Powershell Out-file special charactersPowershell 输出文件特殊字符
【发布时间】:2017-08-17 12:16:38
【问题描述】:

我有一个脚本,它处理来自文件的数据并根据条件将结果写入 txt。给定的数据是带有诸如“Distribución”或“México”之类的单词的字符串。处理时,像“é”和“ó”这样的特殊字符会被破坏(典型的白色方块或问号)。

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

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

在 XXX 中,我尝试了 ASCII、Utf8,但没有任何效果:/

【问题讨论】:

  • 您使用哪个应用程序读取结果文件?也许它的默认字体不包含适当的字符,所以你得到的只是实体占位符。使用十六进制编辑器查看结果文件中的真实内容。
  • 用UTF8编码导入文件,也用UTF8编码处理和导出。
  • @AdamMnich 我有这样一行要导入:$FirstFile = Import-Csv -Delimiter ';' -编码 UTF8 $FirstPath | Select-Object -ExpandProperty Url 它给了我“找不到与参数'编码'匹配的参数”。 FirstPath 是文件的路径
  • 我的意思是导入和导出使用相同的编码。值是否在 Powershell 中正确显示?当您将文件导入回 Powershell 时,是否保留了特殊字符?
  • @AdamMnich 谢谢,我以一种编码类型导入它并以另一种编码类型导出......

标签: powershell encoding utf-8


【解决方案1】:

Out-File 将始终添加 BOM。这是该 Cmdlet 的一个特别烦人的“功能”。不幸的是 - 据我所知 - 在 powershell 中没有使用 UTF8 没有 BOM 的快速方法来保存文件。但是,您可以利用 .Net 来执行此操作。这还没有真正准备好生产,但这里有一个简单的例子:

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

将其包装在 Cmdlet、函数和/或模块中以使其可重用。当然,您也可以使用 .Net 对文件编码进行更多控制。

【讨论】:

  • 默认是WriteAllLinesutf-8?
  • UTF-8 默认没有 BOM。您可以指定编码。有关更多信息,请参阅 MSDN 文档 - 它在“备注”下声明:docs.microsoft.com/en-us/dotnet/api/…
猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2012-06-08
  • 2012-08-07
相关资源
最近更新 更多