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