You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell 7.3.5中Out-File编码失效,非英文字符输出乱码求助

PowerShell 7中ebook-convert导出非英文字符乱码问题解决

问题背景

在Windows CMD中执行命令:

ebook-convert.exe --list-recipes > "builtin recipes.txt"

导出的文件内非英文字符显示完全正常;但在PowerShell 7.3.5中执行同类命令时,非英文字符出现乱码。

问题现象

尝试过以下命令,均存在非英文字符乱码问题:

  • ebook-convert.exe --list-recipes > "builtin recipes.txt"
  • ebook-convert.exe --list-recipes | out-file -Encoding utf8 "builtin recipes.txt"
  • ebook-convert.exe --list-recipes | out-file -Encoding unicode "builtin recipes.txt"

补充说明

  1. 执行最后一条命令后,VS Code检测到文件编码变为UTF-16 LE,但内容仍显示异常;
  2. 用记事本打开该文件,乱码情况一致;
  3. 在PowerShell中直接执行ebook-convert.exe --list-recipes,控制台输出的非英文字符显示正常。

解决方法

问题核心是PowerShell与CMD对外部程序输出的编码处理逻辑不同:ebook-convert的输出编码匹配CMD默认的GBK编码,而PowerShell默认用UTF-8处理管道/重定向,导致编码不匹配引发乱码。

方法一:按控制台编码读取输出后转存

PowerShell能正确识别控制台显示的编码,先读取输出再写入UTF-8文件:

# 获取命令输出
$output = & ebook-convert.exe --list-recipes
# 将输出写入UTF-8编码的文件
$output | Out-File -FilePath "builtin recipes.txt" -Encoding utf8

方法二:临时修改PowerShell的外部程序输出编码

强制将PowerShell的外部程序输出编码设置为GBK,匹配ebook-convert的输出:

# 保存原编码,方便后续恢复(可选操作)
$originalEncoding = [Console]::OutputEncoding
# 设置外部程序输出编码为GBK
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("GBK")
# 执行重定向命令
ebook-convert.exe --list-recipes > "builtin recipes.txt"
# 恢复原编码(可选操作)
[Console]::OutputEncoding = $originalEncoding

内容的提问来源于stack exchange,提问作者PineapplePie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:25:11