UTF8编码的PowerShell脚本中文乱码的解决方法

1.问题现象

使用VSCode(已安装Code Runner扩展)编写含有中文字符串的ps1脚本之后运行收到各种错误
例如:字符串缺少终止符: "。表达式或语句中包含意外的标记“}”。语句块或类型定义中缺少右“}”。

使用快捷键Ctrl+Alt+N触发Run Code
在这里插入图片描述

在这里插入图片描述

2.问题验证

使用Window PowerShell ISE 打开,发现中文乱码并且对应位置有红色波浪线

在资源管理器中找到该脚本文件,右键编辑,使用Window PowerShell ISE打开
在这里插入图片描述

3.问题原因

PowerShell错误的解析 UTF8中文字符串 导致字符串尾部的引号被吞,引号都不成对了,自然报什么错都有可能

4.解决方法

将中文保存为base64躲避PowerShell解析器,运行时自动生成中文

# 将中文转换为base64字符串(在脚本外)
# [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('太阳'))
# 结果:Klkzlg==
# 将base64字符串恢复回中文(在脚本内)
# [Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('Klkzlg=='))

在这里插入图片描述

5.修改后的代码

# Write-Output "疯狂星期四"
$text = [Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('r3XCch9mH2fbVg=='))
Write-Output $text

while ($true) {
    if ($true) {
        # Write-Output "古力娜扎迪丽热巴玛尔扎哈。"
        $text = [Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('5FObUhxaTmLqjz1O7XD0XZtzFFxOYshUAjA='))
        Write-Output $text
    }
    else {
        # Write-Output "雷迪嘎嘎。"
        $text = [Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('95bqjw5WDlYCMA=='))
        Write-Output $text
    }
    break
}

正常运行截图:
在这里插入图片描述

6.其他

勾选Beta 版:使用 Unicode UTF-8 提供全球语言支持并重启电脑。
这什么解决方案?别人电脑其他软件乱码了你要帮忙取消勾选,你的脚本乱码了,然后你再给他勾上,你睡他家得了呗,一乱码你就给他勾一勾。





在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值