Windows cmd 提示符中法语 PSQL 编码问题

问题描述 投票:0回答:1

我已经在 Windows cmd 提示符下的 PSQL 和编码方面苦苦挣扎了一段时间,虽然我设法让它在 4 个不同的数据库上工作大约 4 次,但似乎每次问题都是相同的,但解决方案不同。我已经无法应对了。

到目前为止我已经尝试过:

CREATE DATABASE test WITH OWNER admin
TEMPLATE = TEMPLATE0
LC_COLLATE = 'fr-FR-x-icu'
LC_CTYPE = 'fr-FR-x-icu'
ENCODING = 'UTF8' OR 'WIN1252'

我玩过

SET client_encoding = 'UTF8' or 'WIN1252'
,它工作过几次。在创建表之前,我已将其放入我的
create_tables.sql
文件中,并且在 SQL Shell 中填充表后也使用了它。

我什至在 runpsql 脚本中添加了

cmd.exe /c chcp 1252

我还更改了 Windows 的“非 Unicode 程序的当前语言”,希望它能改变一些东西。

通常这些解决方案的变体都可以工作,但对于我当前正在处理的数据库,它只是拒绝做出任何更改,我已经没有想法了。

是否有我遗漏的东西,或者我应该放弃 Windows 命令提示符并尝试 WSL?


我正在讨论插入表中的数据的编码。编码是UTF-8,数据库也是用

UTF8
编码创建的。

以下是我发送查询后得到的结果:

Savoné
Concâmbre

这些单词包含一个法语字母,如 à ô î é è ê ô û ù。

postgresql windows character-encoding command-prompt psql
1个回答
0
投票

根据您显示的数据,问题出在您的

client_encoding
。您必须将其设置为
UTF8
,以便 PostgreSQL 将数据解释为 UTF-8。设置客户端编码有多种方法:

  • 运行SQL语句

    SET client_encoding = 'UTF8';
    

    或同等程度

    SET NAMES 'UTF8';
    
  • 将环境变量

    PGCLIENTENCODING
    设置为
    UTF8

  • psql
    中,可以设置

    \encoding UTF8
    

这将确保数据库中的数据正确。


还有一个特定于 Windows 的方面;请参阅文档

psql 被构建为“控制台应用程序”。由于 Windows 控制台窗口使用与系统其他部分不同的编码,因此在 psql 中使用 8 位字符时必须特别小心。如果 psql 检测到有问题的控制台代码页,它会在启动时向您发出警告。要更改控制台代码页,需要做两件事:

  • 输入

    cmd.exe /c chcp 1252
    设置代码页。 (1252 是适合德语的代码页;将其替换为您的值。)如果您使用 Cygwin,您可以将此命令放入
    /etc/profile

  • 将控制台字体设置为

    Lucida Console
    ,因为光栅字体不适用于 ANSI 代码页。

这与数据库中存储的内容无关,但它将确保数据在 Windows 命令行上正确显示。

© www.soinside.com 2019 - 2024. All rights reserved.