PowerShell 7.3中Azure CLI命令$(...)调用中文乱码及UTF-8输出问题咨询
问题分析与解决方案
两条命令的本质差异
- 直接运行
az devops user show:PowerShell仅作为“中转”,将az输出的原始字节流直接转发给Windows Terminal,由终端自身的编码设置完成解码显示,全程不经过PowerShell的字符串解码环节,因此中文显示正常。 - 使用
$(...)捕获输出:此时PowerShell会先将az输出的字节流,通过[Console]::OutputEncoding指定的编码解码为字符串,再将字符串输出到终端。如果该编码与az实际输出的编码不匹配,解码过程就会出现乱码。
PowerShell 7.3与5.1的区别
Windows PowerShell 5.1默认的[Console]::OutputEncoding是系统ANSI编码(你的环境为Big5),刚好与az的输出编码匹配,因此捕获输出时解码正常;而PowerShell 7.3默认将[Console]::OutputEncoding设为UTF-8,与az输出的Big5编码不兼容,从而导致乱码。
解决办法
方法1:临时调整编码匹配az输出
你已经验证有效的命令可以解决临时问题,执行后再用$(...)捕获输出即可正常显示中文:
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('big5')
若要永久生效,可将该命令添加到PowerShell 7的配置文件中(运行notepad $PROFILE打开配置文件,粘贴保存即可)。
方法2:强制az输出UTF-8编码
更彻底的方式是让az直接输出UTF-8,与PowerShell 7.3默认编码匹配,无需再手动调整:
- 临时设置环境变量:
永久生效可将该环境变量添加到系统环境变量,或PowerShell配置文件中。$env:AZURE_CLI_OUTPUT_ENCODING = 'utf-8' - 通过az配置全局默认编码:
该命令会修改az的全局配置,后续所有az命令都会默认输出UTF-8,一劳永逸解决编码问题。az configure --defaults output_encoding=utf-8
内容的提问来源于stack exchange,提问作者Will Huang
相关产品推荐
相关产品推荐

