在invoke-webrequst中$body编码无法识别中文


PowerShell交流中心在invoke-webrequst中$body编码无法识别中文
0
softzcw asked 5 年 ago

钉钉接口文档里面说明需要把字符集设置成utf-8  下面是钉钉的文档说明和我的代码

获取到Webhook地址后,用户可以向这个地址发起HTTP POST 请求,即可实现给该钉钉群发送消息。注意,发起POST请求时,必须将字符集编码设置成UTF-8

但是收到的消息都是乱码,怎样才能把字符集设置成utf-8呢,请大大帮忙。

$par='{“msgtype”: “text”, “text”: {“content”: “提取日志成功”}}’
$ding_url=”https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxx”
$h=@{“Content-Type”=”application/json”;”charset”=”UTF-8″}
Invoke-WebRequest -UseBasicParsing $ding_url -Method Post -Body $par -Headers $h

jamecook replied 5 年 ago

可以通过 [array]$JSON =[System.Text.Encoding]::UTF8.GetBytes($JSON)转换成UTF-8.
例子:
[array]$JSON =[System.Text.Encoding]::UTF8.GetBytes($JSON)
curl -uri $uri -Method POST -Body $JSON -ContentType “application/json”}

softzcw replied 5 年 ago

非常感谢,问题解决了。

pstip_newer replied 5 年 ago

直接利用-contenttype “application/json;charset=utf-8”
方便快捷,不用转码

1 Answers
0
pstip_newer answered 5 年 ago

-header里写入编码信息好像没用。直接-contenttype里指定吧。另外json可以用哈希表转换来。看起来更简洁
$par=@{
    msgtype=”text”;
    text=@{
   content=”提取日志成功”;
    };
}
$par=$par | convertto-json

pstip_newer replied 5 年 ago

然后,返回的json,再转换成哈希表,方便提取里面的值。