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,則根本不會出現這個問題。

儘管少見,但一開始的現象讓人摸不著頭緒,還是寫個紀錄留給未來的自己和大家參考。

留言

Spike寫道…
System.Text.Encoding.Unicode不是UTF16嗎

這個網誌中的熱門文章

使用LM Studio輕鬆在本地端以API呼叫大語言模型(LLM)

VS Code的字體大小

使用 Dify 建立企業請假機器人

使用Qdrant向量資料庫實作語意相似度比對

使用C#開發LineBot(3) - 使用LineBotSDK發送Line訊息