3

有谁知道我们应该如何调用 REST API 来存储特殊字符?我尝试了以下方法:

  • 完全没有特殊处理。我注意到 Parse 可以处理特殊字符,例如 #@$ 等,所以我想我会试一试。这最终没有运气。示例 curl 查询是:

curl -X POST \ -H "X-Parse-Application-Id: appId" \ -H "X-Parse-REST-API-Key: apikey" \ -H "Content-Type: application/json;" \ -d '{"testString":"é"}' \ https://api.parse.com/1/classes/TestObject

这将返回 "{"code":107,"error":"The object contains an invalid utf8 string"}" 这是预期的结果。

  • 然后我想我会在帖子调用中添加字符集标题,即

curl -X POST \ -H "X-Parse-Application-Id: appId" \ -H "X-Parse-REST-API-Key: apikey" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{"testString":"é"}' \ https://api.parse.com/1/classes/TestObject

这将返回与第一次尝试相同的结果。

  • 好的,然后我尝试将其手动编码为UTF-8,即

curl -X POST \ -H "X-Parse-Application-Id: appId" \ -H "X-Parse-REST-API-Key: apikey" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{"testString":"%C3%A9"}' \ https://api.parse.com/1/classes/TestObject

现在这确实创建了行,但是,该值实际上是 %C3%A9 而不是 é。我尝试在标题中取出字符集值,这似乎也无济于事。

  • 我注意到通过数据浏览器一切正常。所以我监视 js 查询以查看 db 发送的内容。原来浏览器正在为 é 发送 é。然后我继续改变我的卷曲,tada,我明白了,即

curl -X POST \ -H "X-Parse-Application-Id: appId" \ -H "X-Parse-REST-API-Key: apikey" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{"testString":"é"}' \ https://api.parse.com/1/classes/TestObject

终于给了我我想要的东西,价值é。

现在我很疑惑,到底是什么编码能把é转成é?我还需要处理各种其他特殊的外来字符,我需要找到一种方法将它们可靠地编码为预期的格式......

提前致谢!

4

1 回答 1

1

我刚刚在 OSX 的终端中尝试过这个,没有问题:

curl -X POST \ -H "X-Parse-Application-Id: appID" \ -H "X-Parse-REST-API-Key: restKey" \ -H "Content-Type: application/json;" \ -d '{"testString":"é"}' \ https://api.parse.com/1/classes/TestObject

在此处输入图像描述

终端中的字符编码设置为 UTF-8。但是,当更改为 ISO-8859-1 时,我遇到了与您相同的错误:

{"code":107,"error":"invalid utf-8 string was provided"}

所以@ahoffer 可能是正确的,您没有将 utf-8 设置为终端的字符编码。

于 2014-09-16T16:35:08.050 回答