首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgres +节点+角: utf-8的问题和汉字查询

postgres +节点+角: utf-8的问题和汉字查询
EN

Stack Overflow用户
提问于 2014-12-12 12:54:06
回答 1查看 1.1K关注 0票数 0

在一个小的示例应用程序中,我尝试处理非拉丁字符。因此,我有一个PostgreSQL DB9.4,一个NodeJS服务器,并在客户端使用server。在Postgres中,我有一个简单的表'name‘,其中包含了英语、俄语和中文名称(拉丁语/西里尔语/汉语utf-8字符)。

问题是,如果我从浏览器发送REST请求(在一个类似于选择位置的查询中向Postgres发送),我将得到正确的英文查询响应,而不是中文查询响应。对于REST字符串中的非拉丁字符,我总是一无所获。

  • Postgres设置为UTF-8 (字符类型为C)
  • 用pgAdmin完成的查询可以很好地处理拉丁文/西里尔字母/汉字
  • 在节点I为Postgres设置: client.client_encoding =‘UTF8 8’;
  • 也适用于HTTP响应: res.writeHead(200,{'content-type':'application/json','charset':'utf-8',‘内容-长度’:Buffer.byteLength(Json)});
  • 浏览器告诉我我的HTML/角页面:编码UTF-8

我发现,Node收到的是'/dataload/name?%E9%82%A3%E4%BD%95‘之类的东西,而不是'/dataload/name?那何'.当然,如果我在一个类似的查询中使用这一点,它就会达到相似%、E9%、82%、A3%、E4%、BD%、95%,而且显然是行不通的。但我忘了什么东西在哪里?我要怎么做才能让节点收到正确的UTF-8字符?顺便说一下,我使用Webstorm/Windows进行开发。我应该提供更多的信息吗?我想Postgres已经设置好了,但是在浏览器或角码中有一些设置.?谢谢您的提示!

更新:

我刚在角请求中添加了标题配置:

代码语言:javascript
复制
$http.get(strReq, {
        headers: { 'Content-Type': 'application/json; charset=utf-8' }
    })

但问题仍然存在。萤火虫告诉我:

代码语言:javascript
复制
GET http://.../dataload/name?%E9%82%A3%E4%BD%95

使用此请求头:接受应用程序/json,文本/平原,/ Accept -编码gzip,压缩接受-语言en-US,en;q=0.5 DNT 1主机本地主机

代码语言:javascript
复制
 User-Agent  Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0

但作为参数正确:那何

EN

回答 1

Stack Overflow用户

发布于 2015-10-02 20:28:08

几件事。

  1. RFC3986定义了url中的字符,它基本上是一个简短的列表。任何不符合该列表的内容都必须表示为url编码的字符( %E9等)。因此,您在服务器上接收到的内容看起来是为url正确编码的。
  2. 如果您做了一个帖子,在mime类型中有更多的空间来说明它是如何传递的。
  3. 声明的页面编码(无论是在字符集头中还是在元html头中)通常决定浏览器将如何打包您的输入--甚至比它如何读取它得到的html还要多。声明了utf8之后,您的中文字符实际上将像您看到的那样被序列化(除了%xx将根据实际的对应字节值)。您的浏览器只知道如何将其表示为两个汉字。您本可以声明utf16,但上次我测试它时,浏览器在如何处理这个问题上有点动摇。

其结果是,您需要首先在服务器端执行url解码,或者使用已经为您完成此操作的框架。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27444113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档