自從體驗過用 VSCode 開發 PowerShell 的便利性,VSCode 便成為我的奧林匹克指定 PowerShell 開發工具。但有個小問題,在 .ps1 寫中文會變亂碼。

從微軟官方文件 Understanding file encoding in VSCode and PowerShell 很快找到答案。

探究其原因,VSCode 存檔預設是採用 UTF-8 編碼,而 Windows 10 內建 PowerShell 版本為 5.1,在中文版 Windows 預設的檔案編碼為 BIG5 (CodePage 950),亂碼源自 PowerShell 用 BIG5 編碼解讀 UTF-8 檔案。PowerShell 在 6.0 版之後預設檔案編碼已改為 UTF-8,預計不會再有此問題,而要讓 PowerShell 5.1 正確讀取 UTF-8 編碼檔案,需在檔案前方加上 UTF-8 BOM (Byte Order Mark)。

在 VSCode 切換編碼很簡單,點選下方狀態列的 UTF-8 帶出選單,點兩下改成 UTF-8 with BOM (utf8bom) 就搞定。

但每次建新檔案都要改太麻煩,VSCode 支援針對 .ps1 指定編碼格式,可根本解決問題。UI 操作只能調所有檔案的 Encoding,不能針對 .ps1,故需手動修改 settings.json。個人設定的 settings.json 在 Windows 平台位於 %APPDATA%\Code\User 目錄(若不存在請自行新增),或在 VSCode Preferences 設定 UI 隨便點任何一個 Edit in settings.json 也可在 VSCode 開啟它。

在 settings.json 加入:

"[powershell]": {
    "files.encoding": "utf8bom",
    "files.autoGuessEncoding": true
}

如此,未來在 VSCode 新增 .ps1 就會改用 UTF8 with BOM 編碼囉~

Tips of VSCode file encoding setting for PowerShell script file.


Comments

# by 孫守真任真甫

【VSCode 存檔預設是採用 UTF-8 編碼,而 Windows 10 內建 PowerShell 版本為 5.1,在中文版 Windows 預設的檔案編碼為 BIG5 (CodePage 950),亂碼源自 PowerShell 用 BIG5 編碼解讀 UTF-8 檔案。】 末學在用Visual Studio 2019 C++加入新檔時,儲存後,到Visual Studio Code 看就發現這個問題,後來也才知道在Visual Studio 2019內以其加入新檔精靈加入新檔,它預設也是用big5編碼存檔,而並不接受unicode,才有在換到Visual Studio Code開啟時卻變亂碼的窘境。感恩感恩 讚歎讚歎菩薩慈悲分享 南無阿彌陀佛

# by eddie

12 + 30

# by kkbruce

黑大,要不要試試 PS7,我在 Server 共存使用也沒有問題:https://blog.kkbruce.net/2020/03/join-powershell-core-7.html

# by Jeffrey

to kkbruce, 感謝分享。好物,讓我小猶豫的點是得先在目標主機部署新版。

Post a comment