PowerShellscript,错误的文件编码对话

发布于 2024-12-07 04:11:43 字数 467 浏览 1 评论 0原文

我有一个用于文件字符编码对话的PowerShell脚本。

Get-ChildItem -Path D:/test/data -Recurse -Include *.txt |
ForEach-Object {
  $inFileName = $_.DirectoryName + '\' + $_.name
  $outFileName = $inFileName + "_utf_8.txt"
  Write-Host "windows-1251 to utf-8: " $inFileName -> $outFileName  
  E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName > $outFileName
}

但它不是将 utf-8 转换为文件字符编码,而是将其转换为 utf-16。当我从命令行调用 iconv 实用程序时,它工作正常。

我有什么错吗?

I have a PowerShell script for the conversation of file character encoding.

Get-ChildItem -Path D:/test/data -Recurse -Include *.txt |
ForEach-Object {
  $inFileName = $_.DirectoryName + '\' + $_.name
  $outFileName = $inFileName + "_utf_8.txt"
  Write-Host "windows-1251 to utf-8: " $inFileName -> $outFileName  
  E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName > $outFileName
}

But instead of utf-8 it converts file character encoding into utf-16. When I invoke the iconv utility from command line it works fine.

What do I wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

安稳善良 2024-12-14 04:11:43

当您将输出重定向到文件时,Powershell 使用 Unicode 作为默认编码。您可以使用 -Encoding UTF8 开关通过管道传输到 Out-File,而不是使用重定向运算符。

E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName | Out-File -FilePath $outFileName -Encoding UTF8

以下 TechNet 文章提供了更多信息(相当于 Powershell v2 中的 Get-Help Out-File -full)。

如果它对您的方案有帮助,值得注意的是,您可以使用 Powershell也进行编码转换。

Get-Content $inFileName -Encoding ASCII |
Out-File -FilePath $outFileName -Encoding UTF8

When you redirect output to a file, Powershell is using Unicode as the default encoding. Instead of using the redirection operator, you can pipe to Out-File with a -Encoding UTF8 switch.

E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName | Out-File -FilePath $outFileName -Encoding UTF8

The following TechNet article has more information (equivalent to Get-Help Out-File -full in Powershell v2).

In case it helps your scenario at all, it's worth noting that you can use Powershell to do the encoding conversion also.

Get-Content $inFileName -Encoding ASCII |
Out-File -FilePath $outFileName -Encoding UTF8
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文