PowerShell 中的 UTF-8 编码(CHCP 65001)

  1. PowerShell 中的 Unicode
  2. 更改系统区域设置以在 Windows PowerShell 中使用 UTF-8 编码
  3. $PSDefaultParameterValues 变量中设置编码以在 Windows PowerShell 中使用 UTF-8 编码
  4. 在 Windows PowerShell 中使用 chcp 命令切换到 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 编码中都始终使用 BOM,除了 UTF7。

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

在 Windows PowerShell 中使用 chcp 命令切换到 UTF-8 编码

要在 PowerShell 中切换到 UTF-8 编码,请使用 chcp 命令,后跟 65001

chcp 65001

此命令告诉 PowerShell 使用 UTF-8 编码进行字符输入和输出。

以下是此命令的详细说明:

  • chcp:这是 Windows 命令提示符和 PowerShell 中的一个命令,代表“更改代码页”。代码页确定字符在控制台窗口中的编码和显示方式。

  • 65001:在此上下文中,65001 代表 UTF-8 编码的代码页。UTF-8 是一种可变宽度字符编码,能够编码 Unicode 中的所有可能字符或代码点。

    • UTF-8:它是一种广泛使用的字符编码,可以表示几乎所有人类语言的所有字符。它在互联网上尤为常见。
  • 切换到 UTF-8(65001):当您运行 chcp 65001 时,告诉 PowerShell 在控制台中使用 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 编码的优势,您将能够自信且准确地处理各种文本数据。

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