1

我目前正在编写一个使用pg-promise. 一切正常,除了文本列中的特殊字符(如重音字母)未正确检索(即“Collège”一词在 JSON 对象中显示为“Collège”)。我想这与编码有关,但特殊字符在 ElephantSQL 的仪表板中正确显示,所以我认为数据库编码没有错——尽管我一开始找不到关于数据库编码的任何信息。所以我最好的猜测是,我需要向客户端添加一些东西来指定我希望得到结果的编码。我已经尝试按照本页client_encoding中的描述调整,使用和utf8latin1,但无济于事。是我遗漏了什么还是我只是尝试了错误的编码?

更新

运行以下查询时:

SELECT * 
  FROM information_schema.character_sets;

我得到以下 JSON 对象:

{
character_set_catalog: null,
character_set_schema: null,
character_set_name: "UTF8",
character_repertoire: "UCS",
form_of_use: "UTF8",
default_collate_catalog: "ggnonllb",
default_collate_schema: null,
default_collate_name: null
}

所以我知道我的在线数据库是用 UTF8 编码的(正如人们所期望的那样)。但是即使我运行的每个查询都包含在SET CLIENT_ENCODING TO 'UTF8';. 所以我感到非常困惑。好像这与字符编码无关。但是,如果不是字符编码的问题,为什么 pg-promise 客户端会得到带有特殊字符加扰的结果呢?此外,这仅在检索数据时发生,而不是在发布数据时发生,因为特殊字符在 ElephantSQL 的仪表板中显示为应有的样子。

4

1 回答 1

1

其实,我想通了。似乎这是响应的字符编码问题。当我从浏览器查询我的 API 时,特殊字符仍然没有按应有的方式显示,但是从我的应用程序调用时,一切都很好。

于 2019-08-18T16:49:29.233 回答