PowerShell 会话中的字符编码 (UTF-8)

mrk*_*nck 10 windows postgresql powershell character-encoding

大家好,

作为控制台/终端爱好者和数据库管理员 (PostgreSQL),使用正确的字符编码对我来说至关重要。因此,我希望我的客户端控制台/终端窗口始终设置为例如 UTF-8。

回到 Windows 的 CMD.EXE,这个尝试就像输入命令chcp 65001来设置所需的代码页标识符一样简单。现在,我正在切换到 PowerShell 并且设置字符编码似乎很奇怪,恕我直言。

我已经对如何将 PowerShell 会话设置为 UTF-8 进行了一些研究,我发现我需要三个步骤/命令来完成它。

PS C:\> $OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\> [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\> chcp 65001
Run Code Online (Sandbox Code Playgroud)

尽管前两个命令不直观且难以记住...遗漏其中一个命令会导致无法正常工作!此外,仅设置其中一个似乎对其他人没有影响。

因此,我必须设置所有三个以使用 PostgreSQL 的psql数据库客户端。否则我在导出/导入数据时会遇到编码问题。

现在我的问题是:“为什么?难道没有更简单的方法可以在 PowerShell 中简单地设置字符编码吗?” 不幸的是,我自己没有找到任何关于设置字符编码的合理文档!

提前致谢


/编辑

TheIncorrigible1的第二条评论让我得到了迄今为​​止最好的答案:在 Powershell 中显示 Unicode - 因此可以将整个 PowerShell 与两个单独的语句设置为所需的编码 (UTF-8)。

PS C:\> $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
PS C:\> $PSDefaultParameterValues['*:Encoding'] = 'utf8'
Run Code Online (Sandbox Code Playgroud)

解释:

  • $OutputEncoding设置例如|(管道)和/或程序和/或进程之间的通信的编码。
  • [System.Console]::OutputEncoding设置STDOUT和控制台/终端输出的编码。
  • [System.Console]::InputEncoding设置STDIN或键盘输入的编码。
  • $PSDefaultParameterValues['*:Encoding']为所有支持-Encoding选项的cmdlet 设置编码,例如Out-File -Encoding.

Sha*_*ail 1

您可以使用 PowerShell 配置文件。PowerShell 支持多种配置文件。此外,PowerShell 主机程序可以支持它们自己的特定于主机的配置文件。

例如,PowerShell 控制台支持以下基本配置文件。配置文件按优先顺序列出。第一个配置文件具有最高优先级。

THE PROFILE FILES
Description                  Path
All Users,     All Hosts     $PSHOME\Profile.ps1
All Users,     Current Host  $PSHOME\Microsoft.PowerShell_profile.ps1
Current User,  All Hosts     $Home\[My ]Documents\PowerShell\Profile.ps1
Current user,  Current Host  $Home\[My ]Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Run Code Online (Sandbox Code Playgroud)

配置文件路径包括以下变量:

  • $PSHOME变量,存储 PowerShell 的安装目录

  • $Home变量,存储当前用户的主目录

从下面的文章中,如果您想了解更多相关信息,请访问
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.1&viewFallbackFrom=powershell -7