将SQL ASCII编码为UTF-8损坏的字符

时间:2016-11-07 19:12:19

标签: node.js postgresql encoding utf-8 character-encoding

我正在使用Postgres数据库,该数据库以SQL ASCII编码。

使用node.js,使用pg package,我正在请求一些可能包含重音的行。

当我在浏览器中显示请求中的原始数据时,我遇到了损坏的字符:
enter image description here

我曾尝试使用某种UTF-8编码发送数据,但存在同样的问题:
enter image description here

这里是代码:

<html>
<meta charset="UTF-8">
<body>1 all�e Carl Faberg�</body></html>

开发者工具也不显示此字符:
enter image description here

使用pgAdmin软件,探索数据库,我没有任何问题:
enter image description here

对我而言,似乎问题来自Node.js,但我不知道我有什么解决方案。

您知道我该如何解决这个问题? 谢谢

1 个答案:

答案 0 :(得分:1)

您不应该使用SQL_ASCII数据库编码,因为PostgreSQL不关心编码,也不会将字符串转换为正确的客户端编码。

使用SQL_ASCII,将字符转换为正确的编码(因为您使用Javascript可能是UTF-16)的负担取决于应用程序,因此您必须自己编写转换,可能使用Buffer

首先,您必须找出实际存储数据库中字符的编码。您可以通过将字符串转换为bytea来找出存储在数据库中的字节,如下所示:

test=> SELECT 'allée Carl Fabergé'::bytea;
┌────────────────────────────────────────────┐
│                   bytea                    │
├────────────────────────────────────────────┤
│ \x616c6cc3a965204361726c20466162657267c3a9 │
└────────────────────────────────────────────┘
(1 row)