PowerShell重定向原生命令输出到变量时出现Unicode编码错误的问询
问题原因
直接执行命令输出到控制台时,Windows终端(或PowerShell控制台)默认支持UTF-8字符显示,能正常处理↳这类特殊字符。但将输出保存到变量或管道给PowerShell cmdlet(如Select-Object)时,PowerShell默认会使用系统的**ANSI代码页(charmap)**解码外部命令(html2text)的输出。而html2text输出的是UTF-8编码内容,其中的↳字符不在当前ANSI代码页的字符集中,因此触发UnicodeEncodeError编码错误。
解决方法
以下几种方式可解决编码不匹配问题:
全局设置控制台输出编码为UTF-8
先配置PowerShell读取外部命令输出时使用UTF-8编码,后续所有外部命令都会遵循该设置:[Console]::OutputEncoding = [System.Text.UTF8Encoding]::New() # 之后执行命令即可正常保存或管道处理 $pageContent = wget -qO- "目标网页URL" | html2text指定html2text输出UTF-8编码
若你的html2text版本支持编码参数,可直接让工具输出UTF-8内容,从源头避免编码问题:$pageContent = wget -qO- "目标网页URL" | html2text --encode utf-8用Out-String显式指定编码
通过Out-String强制以UTF-8编码处理输出内容:$pageContent = (wget -qO- "目标网页URL" | html2text) | Out-String -Encoding utf8
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

