在一个小样本应用程序中,我试图处理非拉丁字符。所以我有一个PostgreSQL DB 9.4,一个NodeJS服务器,并为客户端使用Angular。在Postgres,我有一个简单的表' name'收集了英文,俄文和中文名称(拉丁文/西里尔文/中文utf-8字符)。
问题是,如果我从浏览器发送REST请求(在SELECT-WHERE-LIKE查询中使用Postgres),我得到的是英语术语的正确查询响应,但不是中文术语。使用REST字符串中的非拉丁字符,我总是什么也得不到。
在pgAdmin中完成的查询与拉丁文/西里尔文/中文字符配合良好
为Postgres设置:client.client_encoding =' UTF8';
以及HTTP响应:res.writeHead(200,{' content-type':' application / json',' charset': ' UTF-8','内容长度':Buffer.byteLength(JSON)});
浏览器告诉我我的HTML / Angular页面:编码UTF-8
我发现,Node收到类似' / dataload / name?%E9%82%A3%E4%BD%95'而不是' / dataload / name?那何'。当然,如果我在LIKE查询中使用它,那么LIKE %% E9%82%A3%E4%BD%95%并且明显不起作用。但是我忘记了什么?我需要做些什么来让Node收到正确的UTF-8字符?顺便说一句,我使用Webstorm / Windows进行开发。我应该提供更多信息吗?我猜Postgres设置正常,但是在浏览器或Angular代码中有一些设置...? 提前感谢任何暗示!
更新
我刚在Angular请求中添加了头配置:
$http.get(strReq, {
headers: { 'Content-Type': 'application/json; charset=utf-8' }
})
但问题仍然存在。 Firebug告诉我:
GET http://.../dataload/name?%E9%82%A3%E4%BD%95
使用此请求标头:
接受application / json,text / plain, /
Accept-Encoding gzip,deflate
Accept-Language en-US,en; q = 0.5
DNT 1
主持localhost
User-Agent Mozilla / 5.0(Windows NT 6.3; WOW64; rv:34.0)Gecko / 20100101 Firefox / 34.0
但作为参数正确:那何
答案 0 :(得分:0)
有几件事。
结果是您需要首先在服务器端进行URL解码,或者使用已经为您完成此操作的框架。