【问题标题】:Queries from Node to Postgres DB not in UTF8从节点到 Postgres DB 的查询不是 UTF8
【发布时间】:2021-07-28 19:41:16
【问题描述】:

对于一个项目,我必须用 JS(节点)编写一个服务器,它从 Windows 计算机上的数据库(Postgres)返回元素。

在连接正常并返回元素的情况下,一切都“工作正常”,但是,我确实遇到了编码问题。我的元素是法语的,因此,服务器无法正确“看到”某些字母,例如“éàç”(我打印了结果)。控制台正在使用 UTF8(我对其进行了测试),所以问题出在其他地方。

在我看来这个问题来自对数据库的查询(来自客户端的HTML和JS都可以并且支持这些字母)。这是我的代码的一部分,它返回了错误的东西。

var client = new pg.Client({
user: 'xx',
password: 'yy', 
database: 'phrases',
host: 'localhost', 
client_encoding: 'utf8',
port: '5432'
});
client.connect();

client.query('SELECT id,mots from phrase WHERE langue=$1 ORDER BY anno limit 20;', ['fr'])
.then(
  function(data){
    text = data.rows[0].mots; //<= return the text needed
    console.log(text);
  }
);

我几乎可以肯定问题不是来自这部分代码,而是来自数据库方面,但是我可能错了(因此我不明白为什么)。从 PSQL 控制台,我确实有:

show CLIENT_ENCODING; > UTF8
show SERVER_ENCODING; > UTF8

从数据库中:

    Nom    | PropriÚtaire | Encodage |      Collationnement       |    Type caract.    |     Droits d'acc
-----------+-------------+----------+----------------------------+--------------------+-----------------------
phrases   | postgres    | UTF8     | French_France.1252         | French_France.1252 |

我尝试从一个 python 程序(向数据库打印一个简单的请求)来查看结果是否相同,它们是;字母印刷不好。因此,我确定问题来自数据库,并且与编码相关,但无法找到有效的方法。

有人有想法吗?

最好的,

【问题讨论】:

  • SELECTpsql 中的字符是否正确?也许 node.js 不期望 UTF-8,你应该设置client_encoding: 'WIN1252'
  • 我尝试使用 client_encoding: 'WIN1252' 但它返回错误;未知编码 WIN1252。几乎没有关于“pg.client”支持的编码的文档,太难了……在 psql 控制台中,一切都很好,令人惊讶的是……只有控制台外的查询是错误的。

标签: node.js postgresql utf-8


【解决方案1】:

我知道这是一篇旧帖子,作者可能永远不会看到这个,但我认为应该为有这个问题的其他人写一个答案。

我遇到了与您描述的问题非常相似的问题。显然,编码是正确的,但是当您执行SELECT * FROM table 查询时,某些字母会呈现为乱码。这可能是因为 Windows 不会自动使用 UTF-8 编码。

在通过 cmd 进入数据库之前,您可以运行命令 chcp 65001。这会起作用,但通常被认为是低效且危险的。更好的解决方案是执行以下操作:

  1. 搜索应用运行并输入intl.cpl
  2. 转到Administrative 标签
  3. 点击Change System Locale
  4. 选中左下角的复选框。

感谢this@mklement0 的回答

【讨论】:

    猜你喜欢
    • 2015-07-17
    • 2021-01-21
    • 2019-12-17
    • 2016-03-18
    • 1970-01-01
    • 2018-01-07
    • 2015-01-13
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多