【问题标题】:CURL doesn't encode UTF-8CURL 不编码 UTF-8
【发布时间】:2017-05-13 23:50:21
【问题描述】:

我正在使用 Windows 10curl 7.52.1。 当我尝试将 POST 数据发送到 WEBSERVICE 时,curl 并未将字符编码为 UTF-8(我需要显示 pt-BR 字符,例如 àáçÇãõ等)

是的,我已经检查了this,没有成功。

如果我将编码页面设置为chcp 65001,错误仍然存​​在。 更改为chcp 1252 部分解决了问题。

看,如果我提示 echo Administração >> test.txt 而没有任何 chcp 更改,我会得到一个 Administra‡Æo

更改为 chcp 65001 后,我得到 Administração

更改为chcp 1252 后,我终于得到了Administração

但是使用curl, 没有任何改变。

我试过设置标题content-type,不走运:

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 也收到了确切的字母,在这种情况下为 ç

【问题讨论】:

  • 使用二进制数据(并确保文件的编码正确)stackoverflow.com/questions/6408904/…
  • 如果你使用charset=ISO-8859-1会发生什么?
  • @Dekel,回显到文件只是一个例子,实际上我想将数据作为html表单(x-www-form-urlencoded)发布。
  • 我不是要回显到文件。将文件用作输入(而不是输出)。这样您就可以完全控制编码(并且您不会被控制台的编码所束缚)。
  • @Phylogenesis,运行 curl -X POST -H "Content-Type: text/plain; charset=ISO-8859-1" --data-ascii "name=Administração" http://localhost:8084/ws/departments 我得到:{"holder":{"entities":[{"name":"Administração","dateReg":"Dec 29, 2016 2:34:19 PM"}],"sm":{}},"message":{"text":""},"status":-1}。字符已更改,但仍不显示确切的单词,在本例中为 ç

标签: jquery curl encoding utf-8 cmd


【解决方案1】:

在与@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

【讨论】:

  • 花时间写下你找到的解决方案,我投票赞成 :)
猜你喜欢
  • 2021-10-27
  • 2011-10-30
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2016-07-05
相关资源
最近更新 更多