【发布时间】: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