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"
补充说明
- 执行最后一条命令后,VS Code检测到文件编码变为UTF-16 LE,但内容仍显示异常;
- 用记事本打开该文件,乱码情况一致;
- 在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
相关产品推荐
相关产品推荐

