【问题标题】:Character encoding (UTF-8) in PowerShell session [duplicate]PowerShell 会话中的字符编码 (UTF-8) [重复]
【发布时间】:2019-01-26 17:27:52
【问题描述】:

大家好,

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

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

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

PS C:\> $OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\> [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\> chcp 65001

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

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

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

提前致谢


/编辑

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

PS C:\> $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
PS C:\> $PSDefaultParameterValues['*:Encoding'] = 'utf8'

说明:

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

【问题讨论】:

  • @mklement0 在描述 powershell 及其编码问题的标记重复帖子中留下了一个很好的答案。
  • 我标记了错误的答案:here's the one I meant to use
  • 那么这在重新启动(电源/核心)shell 之间是持久的,还是必须添加到配置文件中?
  • 请注意,链接的答案使用New-Object System.Text.UTF8Encoding(等效:[System.Text.UTF8Encoding]::new()),而不是[System.Text.Encoding]::UTF8,因为后者使用 BOM,这是您要避免的$OutputEncoding
  • @not2qubit:不,它不会自动持续存在 - 您必须将其添加到您的 $PROFILE。

标签: windows postgresql powershell character-encoding


【解决方案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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 2013-02-02
    • 2011-02-16
    • 1970-01-01
    • 2017-08-30
    • 2013-05-07
    • 2011-08-06
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多