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 提供全球语言支持并重启电脑。
这什么解决方案?别人电脑其他软件乱码了你要帮忙取消勾选,你的脚本乱码了,然后你再给他勾上,你睡他家得了呗,一乱码你就给他勾一勾。





在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐