Как можно исправить проблему с кодировкой в Powershell при использовании Invoke-WebRequest для вывода данных?

Как исправить проблему некорректной кодировки вывода контента страницы при отправке запроса на веб-сайт из Google Network с помощью обезличенного скрипта PowerShell?
  • 10 апреля 2024 г. 8:59
Ответы на вопрос 2
Для исправления проблемы с кодировкой в Powershell при использовании Invoke-WebRequest, можно попробовать установить нужную кодировку явно при получении контента. Например, можно использовать параметр `ContentType` со значением `text/html; charset=utf-8` для указания кодировки UTF-8 при запросе контента страницы.

Пример кода:

```powershell
$response = Invoke-WebRequest -Uri "https://example.com" -Method Get
$content = [System.Text.Encoding]::UTF8.GetString($response.Content)
Write-Output $content
```

Если указание кодировки явно не помогает, можно попробовать изменить настройки кодировки в Powershell с помощью команды `[Console]::OutputEncoding = [System.Text.Encoding]::UTF8`, чтобы установить кодировку UTF-8 для вывода данных в Powershell.

```powershell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$response = Invoke-WebRequest -Uri "https://example.com" -Method Get
$content = $response.Content
Write-Output $content
```

Также можно использовать другие методы парсинга контента, например, использовать библиотеки HTMLAgilityPack или Regular Expressions для обработки и корректного вывода полученных данных.
Короче, полез таки я повторить ваш запрос 
На заголовки посмотрел до того не очень внимательно

Тут на самом деле проблема не кодировки в смысле клиента (charset), а encoding для протокола - в смысле алгоритма компрессии. По короткому кусочку вывода это было не очень понятно, а выполнили ли вы рекомендацию записать в файл и там посмотреть - не ответили.

Проблема в том, что PSv5.1 не умеет декодировать контент в том виде как вы его просите, а именно
"accept-encoding"="gzip, deflate, br, zstd"
PSv5.1 умеет в gzip, deflate, zstd . а вот в br не умеет

Варианты:
1. Используйте PSv7, он умеет
2. Уберите ' br ' из заголовка accept-encoding запроса
3. Уберите вообще заголовок accept-encoding из запроса
Похожие вопросы