我正在使用Windows 10和curl 7.52.1。
当我尝试将POST
数据发送到WEBSERVICE时,curl无法将字符编码为UTF-8
(我需要显示 pt-BR 字符,例如àáçÇãõ等)
是的,我已经检查了this,没有成功。
如果我将编码页面设置为chcp 65001
,则错误仍然存在。
更改为chcp 1252
可以部分解决问题。
看,如果我提示echo Administração >> test.txt
而不更改任何chcp
,我将得到一个 Administra‡_ 。
更改为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}
我还检查了 WS ,它在运行时(在
JQuery
中)接受字符编码:$.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}
我不知道我还能尝试解决什么。
拜托,你们能帮我吗?
提前致谢。
更新
正如@Dekel所建议的那样,我还尝试使用外部文件作为数据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
第二种方法是对包含要发布的所有内容的文件进行编码。我使用了“ Notepad++ ”>“格式”>“转换为UTF-8(无BOM)”。
然后,提示:
curl -i -X POST -H "Content-Type: text/plain; charset=UTF-8" --data-binary "@test.txt" http://localhost:8084/ws/departments
。