CURL不编码UTF-8
我正在使用Windows 10和curl 7.52.1 。 当我尝试将数据发布到WEBSERVICE时, curl不会将字符编码为UTF-8
(我需要显示pt-BR字符,如àáçÇãõ等)
是的,我已经检查了这个 ,没有成功。
如果我将编码页面设置为chcp 65001
,则错误仍然存在。 更改为chcp 1252
部分解决了问题。
看,如果我在没有任何chcp
更改的情况下提示echo Administração >> test.txt
,我会得到一个Administra‡Æo 。
更改为chcp 65001
我获得了Administração 。
更改为chcp 1252
我终于获得了Administração 。
但是使用curl,
没有任何改变。
我已经尝试设置标题内容类型 ,没有幸运:
curl -X POST -h "Content-Type: text/plain; charset=UTF-8" --data-ascii "name=Administração" http//:localhost:8084/ws/departments
我得到以下输出:
{"holder":{"entities":[{"name":"Administra��o","dateReg":"Dec 29, 2016 2:05:33 PM"}],"sm":{}},"message":{"text":""},"status":-1}
当我运行时(在JQuery
)我还检查了它接受字符编码的WS :
$.ajax({ url:"http://localhost:8084/ws/departments", type:"POST", data: {name: "Administração"}, success: function(data, textStatus, xhr){ console.log(data); } });
我得到了预期的输出:
{"holder":{"entities":[{"name":"Administração","dateReg":"Dec 29, 2016 2:03:17 PM"}],"sm":{}},"message":{"text":""},"status":-1}
我不知道还能尝试解决这个问题。 拜托,你们能帮助我吗?
提前致谢。
UPDATE
正如@Dekel所建议的,我还尝试使用外部文件作为data-bynary( test.txt
的内容是name =Administração ):
curl -i -X POST -H "Content-Type: text/plain; charset=UTF-8" --data-binary "@test.txt" http://localhost:8084/ws/departments
我仍然得到这个不寻常的输出:
**{"holder":{"entities":[{"name":"Administra��o","dateReg":"Dec 29, 2016 2:41:27 PM"}],"sm":{}},"message":{"text":""},"status":-1}**
更新2
@Phylogenesis建议使用charset=ISO-8859-1
。 我注意到,即使返回Administraçà £o结果,在服务器端狭窄地检查,WS正在接收确切的字母,在这种情况下是ç
。
在与@Dekel讨论并提出来自@Phylogenesis的建议之后,我可以部分地解决问题,但是有效。 有两种方式:
-
charset=ISO-8859-1
- 编码文件并作为二进制数据发送
服务器可以使用charset=ISO-8859-1
接收正确的字母。 甚至来自服务器的响应数据显示不正确。
我使用: curl -i -X POST -H "Content-Type: text/plain; charset=ISO-8859-1" --data-ascii "name=Administração" http://localhost:8084/ws/departments
第二种方法是编码包含要POST的所有内容的文件。 我使用Notepad ++> Format> Convert to UTF-8(无BOM) 。
然后,提示: curl -i -X POST -H "Content-Type: text/plain; charset=UTF-8" --data-binary "@test.txt" http://localhost:8084/ws/departments
。