【发布时间】:2015-05-14 07:58:56
【问题描述】:
我有一个简单的应用程序,它使用 jquery ajax 请求将表单数据发送到节点服务器,然后节点服务器使用节点 js 的请求模块提交给第三方 api。
我遇到的问题是重音(和其他类似)字符在到达第三方服务器时未正确编码。例如 é 被记录为 é
我相当确定这与 Request 的设置有关,因为当我绕过 ajax 调用时得到相同的结果。
这是我正在使用的设置:
html:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
jquery ajax 设置:
type : 'POST',
url : '/api',
data : formData, // A json object
dataType : 'json',
ContentType : 'text/html; charset=utf-8'
节点中的请求模块设置(ajax post和请求发送之间的表单数据没有发生任何事情):
request.post({
url: "https://testurl.com/api/",
form: formData,
headers: {'Content-Type': 'application/json; charset=utf-8'}
} ...
我已经阅读了各种 SO 解决方案,但都没有成功,因此非常感谢任何建议。
【问题讨论】:
-
您是否尝试将请求的“编码”选项专门设置为“utf-8”?您的应用程序堆栈中有正文解析器吗? (那么在将 formData 分配给
request之前,它实际上是否被解析为 JSON 或者它仍然是一个字符串?)。当您在节点服务器上console.log(formData)时会发生什么? -
是的,我试过
encoding: 'utf-8',结果相同。我正在使用 Body Parser:app.use(bodyParser.urlencoded({ extended: false }));和app.use(bodyParser.json());当我在 formData 发出请求之前记录它时,我得到了一个看起来像 javascript 对象的东西{ first_name: 'é' } -
您说绕过 ajax 调用会得到“相同的结果”?您的意思是直接将数据发送给第三方?然后就可以了?
-
我的意思是当我在节点服务器上使用 Request post 路由而不涉及 ajax 时,我仍然得到不正确的字符。如果我直接发布给第三方,我不会收到错误消息(使用他们的端点而不涉及节点或 ajax)。这表明问题出在 Request 上。
-
尝试设置
encoding: 'utf8'(不带破折号)-根据这里的线程它很冷是解决方案:stackoverflow.com/questions/8332500/…
标签: javascript jquery ajax node.js character-encoding