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