对于一个项目,我必须在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程序(向数据库打印一个简单的请求),看结果是否相同;字母打印不好。因此,我确定问题出在数据库中,并且与编码相关联,但是无法找到有效的方法。
有人有主意吗?
最好
答案 0 :(得分:0)
我知道这是一篇旧帖子,作者可能永远不会看到这个,但我认为应该为其他有此问题的人写一个答案。
我遇到了与您描述的问题非常相似的问题。显然,编码是正确的,但是当您执行 SELECT * FROM table
查询时,某些字母会呈现为乱码。这可能是因为 Windows 不会自动使用 UTF-8 编码。
在通过 cmd 进入您的数据库之前,您可以运行命令 chcp 65001
。这会起作用,但通常被认为是低效和危险的。更好的解决方案是执行以下操作:
intl.cpl
Administrative
标签Change System Locale
感谢@mklement0 的 this 回答