Как обсуждалось в комментариях, похоже, что Confluence API кодирует HTTP-ответы с использованием UTF8, но не включает заголовок "Content-Type", чтобы указать, что.
HTTPспецификация параметра charset гласит, что при отсутствии этого заголовка клиент должен предполагать, что он закодирован с набором символов ISO-8859-1, так что то, что происходит в вашем запросе, выглядит примерно так:
# server (Confluence API) encodes response text using utf8
PS> $text = "ü";
PS> $bytes = [System.Text.Encoding]::UTF8.GetBytes($text);
PS> write-host $bytes;
195 188
# client (Invoke-RestMethod) decodes bytes as ISO-8859-1
PS> $text = [System.Text.Encoding]::GetEncoding("ISO-8859-1").GetString($bytes);
PS> write-host $text;
ü
Учитывая, что вы не можете контролировать то, что отправляет сервер, вам нужно либо самостоятельно захватить необработанные байты (например, используя System.Net.Http.HttpClient ) и декодировать их, используяUTF8 или измените существующий ответ, чтобы компенсировать несоответствие кодировки (например, ниже).
PS> $text = "ü"
PS> $bytes = [System.Text.Encoding]::GetEncoding("ISO-8859-1").GetBytes($text)
PS> $text = [System.Text.Encoding]::UTF8.GetString($bytes)
PS> write-host $text
ü
Обратите внимание, что если вы используете параметр -Outfile
в Invoke-RestMethod, он, предположительно, передает потоковые байты ответа непосредственно на диск. без декодирования или кодирования, поэтому результирующий файл уже содержит utf8 $bytes
, а не utf8 $bytes -> string decoded using ISO-8859-1 -> file bytes encoded using utf8