编码无法发送到 API Node JS 的奇怪字符

Posted

技术标签:

【中文标题】编码无法发送到 API Node JS 的奇怪字符【英文标题】:Encode strange characters which are unable to be sent to API Node JS 【发布时间】:2017-01-26 23:19:41 【问题描述】:

我的名字是 Juraj Čarnogurský。注意Č 字符。 我想将我的名字从一台服务器发送到 API。但是我的姓被替换成了这个

"firstName":"Juraj","lastName":"
                                arnogurský"

这会破坏 JSON 格式。

顺便说一句,我正在使用 NodeJS。

如何将我的姓氏编码为适合网络传输的形式?

编辑

我这样做:

const jsonrpc = require('jsonrpc-lite');
const requestHttp = require('request');

还有这个:

let obj = jsonrpc.request(id, method, params);

requestHttp(
    uri: 'http://localhost:3001/api?data=' + JSON.stringify(obj),
    method: 'GET',
, (error, response, body) =>  ...

作为 id 我发送'1' 作为方法我发送addCustomer 作为参数我发送这个:


     customerId: senderID,
     facebookId: senderID,
     firstName: context.user.firstName,
     lastName: context.user.lastName,

context.user.lastName 是 Čarnogurský

【问题讨论】:

我无法复制。请发布更多代码并为我们提供更多上下文。名字的传播方向是什么?它是如何发送的?它是如何编码的? @theonlygusti 我已经编辑了问题。 encodeURIComponent('Č'); //"%C4%8C" 【参考方案1】:

你已经意识到了

uri: 'http://localhost:3001/api?data=' + JSON.stringify(obj)

必须替换为

uri: 'http://localhost:3001/api?',
qs: 
  data: JSON.stringify(obj),


这是因为所有网址都可以only use ASCII:

URL 仅使用 US-ASCII 编码字符集。

您的姓名包含 ASCII 集之外的字符。

【讨论】:

【参考方案2】:

我已经这样做了:

requestHttp(
        uri: 'http://localhost:3001/api?',
        qs: 
            data: JSON.stringify(obj),
        ,
        method: 'GET',
, (error, response, body) =>  ...

而不是这个:

requestHttp(
     uri: 'http://localhost:3001/api?data=' + JSON.stringify(obj),
     method: 'GET',
, (error, response, body) =>  ...

【讨论】:

以上是关于编码无法发送到 API Node JS 的奇怪字符的主要内容,如果未能解决你的问题,请参考以下文章

node.js express,一个很奇怪的行为

Node.js / Express - 如何设置响应字符编码?

如何显示从 Node.js API 发送到 Next.js 的验证错误

使用wcf.js和node.js与Alexa联系WCF服务无法正常工作?

无法使用javascript向ASP.NET web api Controller发送http POST请求

条纹编码很奇怪