在PowerShell中运行Azure CLI命令时,特殊字符和编码处理

17 浏览
0 Comments

在PowerShell中运行Azure CLI命令时,特殊字符和编码处理

我一直在命令提示符和Windows Powershell中强制使用chcp 65001,但根据在SO和其他社区的问答帖子来看,这似乎是一个危险且低效的解决方案。微软是否提供了一个改进/完整的替代方案,可以永久保存而无需手动更改注册表?如果没有,是否有公开宣布的时间表或计划来支持将UTF-8用于Windows CLI?

个人而言,我一直在使用chcp 949来支持韩文字符,但最近反斜杠\的显示异常以及在一些应用程序(如Neovim)中显示不正确/难以理解,以及不支持非韩文字符的问题似乎变得更加严重。

0
0 Comments

在使用PowerShell运行Azure CLI命令时,处理特殊字符和编码的问题可能会出现。问题的原因是PowerShell默认使用ANSI编码,而Azure CLI命令需要使用UTF-8编码来正确地处理特殊字符和编码。为了解决这个问题,可以采取以下步骤:

1. 将系统区域设置的语言设置为UTF-8。这可以通过运行"intl.cpl"命令打开控制面板的区域设置,并按照指示进行设置。

这将将系统的活动OEM代码页和ANSI代码页都设置为65001,即UTF-8代码页。这样做将使所有未来的控制台窗口(使用OEM代码页)默认为UTF-8,并使使用ANSI代码页的传统非Unicode GUI子系统应用程序使用UTF-8。

2. 在PowerShell中,还需要将$OutputEncoding变量设置为UTF-8编码,以便正确地将数据发送到外部程序。可以将以下命令添加到$PROFILE文件中,以便在每次启动PowerShell时自动设置$OutputEncoding变量:

$OutputEncoding = [System.Text.UTF8Encoding]::new()

3.(可选)如果在环境中无法将系统区域设置为UTF-8,可以使用启动命令来解决此问题。对于PowerShell,可以在$PROFILE文件中添加以下行:

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

4. 对于cmd.exe,可以通过在注册表中定义自动运行命令来设置代码页为65001。可以使用PowerShell来创建这个值:

Set-ItemProperty 'HKCU:\Software\Microsoft\Command Processor' AutoRun 'chcp 65001 >NUL'

通过采取上述步骤,可以解决在PowerShell中运行Azure CLI命令时特殊字符和编码处理的问题,确保正确地编码和解码字符。

0