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嗎

這個網誌中的熱門文章

原來使用 .net 寫個 MCP Server 如此簡單

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

開啟 teams 中的『會議轉錄(謄寫)』與Copilot會議記錄、摘要功能

在VS Code當中使用 Azure DevOps MCP Server

原來使用 .net 寫個 MCP Client 也如此簡單