【发布时间】:2020-12-24 13:55:10
【问题描述】:
我正在尝试从 Json 转换 Powershell 变量,但得到的是问号而不是希伯来语。
据我所知,ConvertFrom-Json 没有编码参数,有什么想法可以通过希伯来语吗?
看看这个词:מחילמ
PS D:\wa2> $BotUpdates
StatusCode : 200
StatusDescription : OK
Content : {"succes":true,"response":[{"key":{"remoteJid":"","fromMe":false,"id":"","participant":""},"message":{"conversation":"***מחילמ***"},...
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 308
Content-Type: application/json; charset=utf-8
Date: Thu, 24 Dec 2020 13:35:35 GMT
ETag: W/"134-v3U3d/6PCvlXMASgH7...
Forms : {}
Headers : {[Connection, keep-alive], [Keep-Alive, timeout=5], [Content-Length, 308], [Content-Type, application/json; charset=utf-8]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 308
从 Json 转换后
PS D:\wa2> ($BotUpdates | ConvertFrom-Json).response
key message messageTimestamp participant
--- ------- ---------------- -----------
@{remoteJid=18XXXXXX; fromMe=False; id=3AXXXXXX67A1; participant=9} @{conversation=??????????} 1608816932
PS D:\wa2>
看看@{conversation=??????????}
有什么想法吗?
【问题讨论】:
-
这很奇怪,因为响应对象本身表明响应已正确接收 - 或者您没有显示原始输出?
ConvertFrom-Json对内存中已经存在的 .NET 字符串进行操作,而字符编码的解释仅在Invoke-WebRequest解析请求并构造这些 .NET 字符串时发生。响应建议使用 UTF-8 编码,Invoke-WebRequest应通过Content-Type标头字段获取。顺便说一句:对于 JSON API,使用Invoke-RestMethod通常更简单,因为它内置了ConvertFrom-Json,可以这么说。 -
如果您确实发现响应的字符编码被误解了,您可以尝试在之后重新编码,如this answer所示。
-
这可能与控制台输出编码(
$OutputEncoding)有关,原始字符串非常好。您可以将其重定向到一个文件(使用正确的编码)并验证。
标签: json powershell hebrew convertfrom-json