VS Code Terminal 的編碼問題
昨天上課的時候,碰到詭異的事件。
我想Demo一個寫好了的範例,主要是 semantic kernel 加持下的 agent 開發,我把code run起來,開始跟agent對話:
不對,我覺得它今天有點胡言亂語。
我第一個檢查的是 GPT Model,為我知道 semantic kernel 必須使用GPT-4而不是 3.5,看了一下程式碼:
var OpenAIModel = "gpt-4-turbo-preview";
沒錯啊,gpt-4-turbo-preview,這是 OpenAI 既有的模型,不該有問題才對。我執行的環境是 VS Code,試了半天,找不出程式碼有任何問題。只好切換到 Windows 的 Terminal,怪了,沒問題:
上面這樣的對談才是正確的結果啊!
為何在 VS Code的 Terminal 中不行呢? 請 Copilot 幫我寫了段 code 測試:
果然是 charset 的問題。
先找解決方案,測試了一下,在 vs code 當中預設的 code page 是 473,改為 950 或 65001結果一樣,沒效。
既然從外界無法解決,那就調整程式碼了。試著在指令碼中,將輸入輸出改為通用的 Unicode:
//將輸入出入改為 UTF-8
Console.InputEncoding = System.Text.Encoding.Unicode;
Console.OutputEncoding = System.Text.Encoding.Unicode;
觀察執行的結果,搞定:
除了上面的測試,Agent對談的時候也恢復正常了。
後記:
這個問題有一定的獨特性,因為我的環境是由英文版的作業系統轉為中文版,這個狀況才會發生,如果你在純中文版環境上安裝 VS Code,則根本不會出現這個問題。
儘管少見,但一開始的現象讓人摸不著頭緒,還是寫個紀錄留給未來的自己和大家參考。
留言