Подтвердить что ты не робот

Неверная кодировка в PowerShell Invoke-WebRequest POST

Я использую метод POST метода Invoke-WebRequest для отправки текстовых данных. После отправки текста с неправильной кодировкой.

Script:

$postData = "žluťoučký kůň úpěl ďábelské ódy"
Invoke-WebRequest -Uri 'http://www.mydomain.com/' -Method Post -Body $postData -ContentType "text/plain; charset=utf-8"

Скрипач:

POST http://www.mydomain.com/ HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 6.2; cs-CZ) WindowsPowerShell/4.0
Content-Type: text/plain; charset=utf-8
Host: www.mydomain.com
Content-Length: 31

zlutouck� kun �pel d�belsk� �dy

Edited

Кажется, что сначала нужно преобразовать текст в utf8. В PowerShell ISE по умолчанию используется другая кодировка. В моем случае, windows-1250.

$text = "žluťoučký kůň úpěl ďábelské ódy"
$postData = [System.Text.Encoding]::UTF8.GetBytes($text)
Invoke-WebRequest -Uri 'http://www.mydomain.com/' -Method Post -Body $postData -ContentType "text/plain; charset=utf-8"
4b9b3361

Ответ 1

Это сработало для меня:

$postData = "žluťoučký kůň úpěl ďábelské ódy"
Invoke-WebRequest -Uri 'http://www.example.com/' -Method Post -Body $postData 
 -ContentType "text/plain; charset=utf-8"

Добавление charset = utf-8 исправил мою проблему, когда символы острого акцента были преобразованы в специальные символы.

Ответ 2

Я должен был сделать две вещи, чтобы решить проблему. Кодируйте тело и добавьте кодировку в заголовок:

$body = [System.Text.Encoding]::UTF8.GetBytes($body);

$headers = @{
            "Content-Type"="application/json; charset=utf-8";
            "OData-MaxVersion"="4.0";
            "OData-Version"="4.0";
        };

Invoke-WebRequest -Uri "$($odataEndpoint)systemusers($userid)" -Method PATCH -Headers $headers -Body $body -UseDefaultCredentials