Thinkin Markdown

Command Prompt / Windows Powershell 預設使用 UTF-8 編碼

解決 Windows 惱人的亂碼問題

發佈時間 2020-02-21
閱讀時間 4 分鐘
主題 命令列
標籤
WindowsCommand PromptWindows Powershell
Command Prompt / Windows Powershell 預設使用 UTF-8 編碼

此文主要協助各位調整 Command Prompt / Windows Powershell 預設使用 UTF-8 編碼,有興趣就往下看吧!

前言

相信每個工程師應該都會碰到需要下指令的時候,但多少都會碰到中文亂碼這件事,這時就會準備直接打開瀏覽器搜尋 “XXXX 中文亂碼” 等關鍵字,而且這種問題好像比較多都是華人會碰到,畢竟多數程式在設計就會是以 UTF-8 編碼為主,因其受眾也比較多的關係。

cmd-powershell-1

Default Code Page

所以今天就來談談 Win 10 環境下,如何調整 Command Prompt / Windows Powershell 預設使用 UTF-8 編碼 。

臨時修改

> chcp 65001

僅調整當下 Process(Command Prompt / Windows Powershell)的字碼頁(CodePage)為 65001。

cmd-powershell-2

CodePage 65001 now actived

永久修改

Command Prompt

💭 在命令提示視窗(Command Prompt)顯示UTF-8內容

上文中有關 davidhcefx 的回覆解法,的確可以讓 Command Prompt 預設 UTF-8 編碼,而不用每次都還要改字碼頁,下面就稍微圖解一下:

  1. Windows 搜尋 regedit
  2. 前往 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor 該位置 cmd-powershell-3
  3. 於第二點提到之位置底下新增字串值數值名稱Autorun數值資料chcp 65001>nul cmd-powershell-4

此時再次創建一個新的 Process,預設字碼頁就是 65001 了。

cmd-powershell-5

CodePage 65001 now actived

Windows Powershell

如果 Windows Powershell 要預設使用 UTF-8 編碼相比於 Command Prompt 就複雜得多… 畢竟微軟出品 (´_ゝ`)

💭 Using UTF-8 Encoding (CHCP 65001) in Command Prompt / Windows Powershell (Windows 10)

上文有比較詳細的討論,下面這邊就稍微圖解一下:

  1. 確認 [console]::OutputEncoding[console]::InputEncoding$OutputEncoding 這些變數 cmd-powershell-6
  2. 確認 $PROFILE 變數 cmd-powershell-7
  3. 新增 Microsoft.PowerShell_profile.ps1 至第二點提到之位置 C:\Users\UserName\Documents\WindowsPowerShell 底下 cmd-powershell-8
  4. Microsoft.PowerShell_profile.ps1 內容如下:
    $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [Text.UTF8Encoding]::UTF8 cmd-powershell-10

此時再次創建一個新的 Process,預設字碼頁就是 65001 了。

cmd-powershell-9

CodePage 65001 now actived

回過頭來看 PowerShell 為什麼可以透過 Profile 檔案來客製化 Process 環境?其實也沒有什麼特別的原因,答案盡在 PowerShell 官方文件 About Profiles,它設計上本來就可以利用 Profile 檔案來客製 Process 環境 !

以上例來看,我僅侷限在當前的登入者呼叫 PowerShell 要去幫我先跑 Profile 檔案,若換了另一個登入者呼叫 PowerShell 就不會特別先去跑 Profile 檔案,因為另一位登入者並沒有照我們上述做了那些事情!

當然也可以預設讓所有登入者都去跑同一個 Profile 檔案,這部分就參考官方文件囉~

···

不過還有一件特別需要注意的事情,就是 PowerShell 在執行指令時要特別小心編碼問題!

💭 PowerShell 執行非 .NET 程式在輸出資料時要注意編碼問題

你可能會覺得很奇怪?阿不是我們都調整好 UTF-8 編碼了嗎?

我創建了一個名為 test 的文字文件檔且編碼為 UTF-8,如下圖:

cmd-powershell-11

WTF

如果沒特別給 encoding 參數,就會顯示亂碼,我也是覺得蠻黑人問號 (›´ω`‹ ) …

算是先留下一個洞,未來有再碰到類似問題,再回來解答吧~

結尾

感謝各位花時間看完此篇小文,如果本文中有描述錯誤,還請各位指教。

希望這篇文章可以解決掉大多數人對於 Command Prompt / Windows Powershell 預設使用 UTF-8 編碼的困擾哦◝( ゚∀ ゚ )◟

如果這篇文章對你有幫助,歡迎分享給更多人!

贊助支持

如果你喜歡我們的文章,或是這些內容對你有幫助,歡迎透過以下平台請我們喝杯咖啡,支持我們持續創作!

Ko-fi

作者

NE

Neil Tsai

樂於分享所見所聞所覺所知的全端工程師

留言功能需要 Cookie 授權

為了載入留言功能,我們需要您同意使用「功能性 Cookie」。您可以隨時在設定中調整。

免責聲明

本網站對於任何使用或引用本網站網頁資料引致之損失或損害,概不負責。本網站亦有權隨時刪除、暫停或編輯本網站所登載之各項資料,以維護本網站之權益。除法律有強制規定外,在任何情況下,本網站對於 (1) 使用或無法使用本網站之各項服務;(2) 經由本網站取得訊息或進行交易;(3) 第三人在本網站上之陳述或作為;以及 (4) 其他與本網站服務有關之事項所致生之任何直接、間接、附帶、特別、懲罰性或衍生性損害,一概不負賠償責任。

CopyRight © 2026 Thinkin Markdown