在 PowerShell 中的 UTF-8 編碼 (CHCP 65001)

  1. PowerShell 中的 Unicode
  2. 在 Windows PowerShell 中更改系統區域以使用 UTF-8 編碼
  3. $PSDefaultParameterValues 變量中設置編碼以使用 Windows PowerShell 中的 UTF-8 編碼
  4. 使用 chcp 命令在 Windows PowerShell 中切換到 UTF-8 編碼
  5. 在 PowerShell 中使用 UTF-8 編碼的好處
  6. 結論
在 PowerShell 中的 UTF-8 編碼 (CHCP 65001)

UTF-8 編碼,在 PowerShell 中表示為 CHCP 65001,是處理控制台中的多語言和特殊字符的重要工具。本文將提供一個全面的指南,介紹如何在 PowerShell 中利用 UTF-8 編碼,從理解其重要性到實際操作。

PowerShell 中的 Unicode

Unicode 是一個世界範圍的字符編碼標準。它定義了文本文件、網頁和其他文檔中的字符如何表現。

計算機系統使用 Unicode 來操作字符和字符串。PowerShell 中的默認編碼是 Windows-1252。

Unicode 的開發是為了支持世界所有語言的字符。PowerShell 默認支持 Unicode 字符編碼。

UTF-8 和 UTF-16 是最常見的 Unicode 編碼。PowerShell 在所有 Unicode 編碼中,除了 UTF7,始終使用 BOM

BOM(字節順序標記)是包含在文件或文本流的前幾個字節中的 Unicode 簽名,用以指示 Unicode 編碼。

理解 UTF-8 編碼

UTF-8 是一種字符編碼標準,使用可變寬度編碼來表示文本。它能夠編碼幾乎所有 Unicode 中的字符,使其成為互聯網上最廣泛使用的字符編碼。

在 PowerShell 的上下文中,UTF-8 編碼確保來自不同語言的字符、符號和特殊字符能正確顯示和處理於控制台窗口中。

在 Windows PowerShell 中更改系統區域以使用 UTF-8 編碼

可以選擇在 Windows 中更改系統區域(非 Unicode 程序的當前語言)。但此功能仍在測試版中。

控制面板區域設置 進入,或者從 運行 程序中打開 intl.cplWindows+R)。

在 PowerShell 中將系統區域設置更改為使用 UTF-8 編碼

打開 管理 標籤,然後點擊 更改系統區域。接著,勾選下面圖片中的 Beta 選項。

使用 Unicode UTF-8 以支持全球語言

之後,按 確定 並重啟計算機以應用設置。

重啟電腦後,您可以檢查 $OutputEncoding 變量以查看當前編碼。

$OutputEncoding

輸出:

如您所見,當前編碼是 Unicode(UTF-8)。

BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 65001

現在,您可以在 PowerShell 中查看其他語言的字符。

Get-Content test.txt

輸出:

만나서 반가워요

$PSDefaultParameterValues 變量中設置編碼以使用 Windows PowerShell 中的 UTF-8 編碼

$PSDefaultParameterValues 是 PowerShell 中的一個內建自動變量,允許您為 cmdlet 參數設置默認值。這意味著您可以為 cmdlet 的參數指定默認值,而不必每次使用 cmdlet 時都明確提供它們。

您可以運行以下命令來啟用 PowerShell 中的 UTF-8 編碼。

$PSDefaultParameterValues = @{'*:Encoding' = 'utf8' }

該設置僅適用於當前的 PowerShell 控制台。退出 PowerShell 窗口後將重置為默認值。

Get-Content test.txt

輸出:

만나서 반가워요

PowerShell 中的幾個 cmdlet 都有 -Encoding 參數用於指定不同字符集的編碼。其中一些有 Add-ContentSet-ContentGet-ContentExport-CsvOut-File 等。

-Encoding 參數支持這些值:asciibigendianunicodeoemunicodeutf7utf8utf8BOMutf8NoBOMutf32

使用 chcp 命令在 Windows PowerShell 中切換到 UTF-8 編碼

要在 PowerShell 中切換到 UTF-8 編碼,請使用 chcp 命令後接 65001

chcp 65001

此命令告訴 PowerShell 在字符輸入和輸出中使用 UTF-8 編碼。

以下是該命令的詳細解析:

  • chcp:這是 Windows 命令提示符和 PowerShell 中的一個命令。它代表 "Change Code Page"。代碼頁決定字符在控制台窗口中的編碼和顯示方式。

  • 65001:在這個上下文中,65001 代表 UTF-8 編碼的代碼頁。UTF-8 是一種可變寬度字符編碼,能夠編碼 Unicode 中的所有可能字符或代碼點。

    • UTF-8:這是一種廣泛使用的字符編碼,幾乎可以表示所有人類語言中的字符,尤其在互聯網上十分常見。
  • 切換到 UTF-8(65001):當您運行 chcp 65001 時,您告訴 PowerShell 在控制台中使用 UTF-8 編碼進行字符輸入和輸出。這在處理包含不同語言和符號的文本數據時非常有幫助。

    例如,如果您處理的文件或數據包含非英語字符,將代碼頁設置為 UTF-8 確保這些字符能在控制台中正確顯示。

重置為默認代碼頁

請記住,改變代碼頁可能會影響某些控制台應用程序的行為,因此在完成使用 UTF-8 後,通常最好將其重置為默認代碼頁(通常對於英語為 437)。

要將代碼頁重置為默認值,您可以使用如下命令:

chcp 437

這將切換回適合英語文本的系統默認代碼頁。

在 PowerShell 中使用 UTF-8 編碼的好處

  1. 多語言支持:UTF-8 允許 PowerShell 處理多種語言的文本,確保來自不同文本框的正確顯示與處理。
  2. 特殊字符:在處理如表情符號或數學符號等不在標準編碼中表示的特殊字符時至關重要。
  3. 文件處理:在處理包含各種語言字符的文本文件時,使用 UTF-8 確保準確的文件操作。
  4. 數據處理:如果您處理的數據包含非英語字符,將代碼頁設置為 UTF-8 確保正確的處理。

潛在考量

  1. 控制台應用程序:改變代碼頁可能影響某些控制台應用程序的行為。完成使用 UTF-8 後,始終重置為默認代碼頁(對於英語為 chcp 437)。
  2. 兼容性:確保您在 PowerShell 中運行的程序或腳本能處理 UTF-8 編碼。舊版應用程序可能不完全支持它。

實際用途案例

  1. 讀取文件:在讀取包含非英語字符的文本文件時,使用 UTF-8 確保準確的表示。
  2. 網頁抓取:如果您提取的網站文本中可能包含來自不同語言的字符,UTF-8 確保正確的解釋。
  3. 腳本輸出:如果您的腳本生成的輸出包含非英語字符,使用 UTF-8 確保其正確顯示。
  4. 互動 PowerShell 會話:在需要輸入或輸出包含特殊字符的文本的互動會話中,UTF-8 編碼是無價的。

結論

在 PowerShell 中使用 UTF-8 編碼(CHCP 65001)是一個強大的工具,用於處理控制台中的多語言和特殊字符。它允許準確表示和處理來自各種語言和文本的數據。理解何時以及如何使用 UTF-8 編碼確保在處理多樣字符集時的順利體驗。

請務必考慮程序或腳本與 UTF-8 的兼容性,必要時始終恢復到默認代碼頁。通過利用 UTF-8 編碼的優勢,您將能自信且準確地在 PowerShell 中處理各種文本數據。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website