Я пытаюсь преобразовать переменную Powershell из Json и вместо иврита получаю вопросительные знаки.
Насколько я знаю, для 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=??????????}
Есть идеи?
Если вы обнаружите, что кодировка символов ответа неверно истолкована, вы можете попробовать перекодировать впоследствии, как показано в этом ответе.
Это, вероятно, связано с кодировкой вывода консоли ($OutputEncoding), и исходная строка в порядке. Вы можете перенаправить его в файл (с правильной кодировкой) и проверить.

Ну, я хотел бы обновить, что я решил это, конвертируя
($BotUpdates.content | ConvertFrom-Json).response
Вместо
($BotUpdates | ConvertFrom-Json).response
Это любопытно, учитывая, что сам объект ответа предполагает, что ответ был получен правильно, или вы не показываете необработанный вывод?
ConvertFrom-Jsonработает со строками .NET, уже находящимися в памяти, тогда как интерпретация кодировки символов происходит только тогда, когдаInvoke-WebRequestанализирует запрос и создает эти строки .NET. В ответе предлагается кодировка UTF-8, которуюInvoke-WebRequestследует подобрать через поле заголовкаContent-Type. В качестве отступления: для JSON API, как правило, проще использоватьInvoke-RestMethod, так как он, так сказать, встроен вConvertFrom-Json.