<strong>как мне достичь бесперебойной работы utf-8 в современном power shell на windows</strong>

## Русская статья

## Проблемы с кодировкой в PowerShell и Python

При использовании команд в PowerShell для записи символов в файлы возникают проблемы с кодировкой, особенно когда используется символы Unicode, такие как греческая заглавная буква дельта (Δ).

### Ошибка при использовании Python
При попытке записать символ греческой заглавной буквы дельта в файл с помощью Python возникает ошибка UnicodeEncodeError из-за использования кодировок, которые не поддерживают передачу символов Unicode.

### Различия между PowerShell и WSL
При использовании команды Python в Windows Subsystem for Linux (WSL) результат оказывается корректным, в отличие от использования PowerShell в Windows.

### Важная информация об используемой кодировке
При использовании PowerShell Core v7.3.6 установлена кодировка UTF-8, которая должна обеспечивать корректное отображение символов Unicode, однако возникают проблемы при записи в файл.

## Подтекст вопроса
Автор имеет скрипт, взаимодействующий с cmd-программами и принимающий текстовый вывод для принятия решений. Один из инструментов работает в UTF-16 LE, что осложняет дальнейшую обработку результатов работы.

### Пример использования

program -parameter > resultat.txt


Под Windows 7 это кодирование кажется проблемным для работы в командной строке/batch, потому что вы не можете прочитать содержимое такого текстового файла в переменную.

Вот пример, (в этом используется только первая строка текстового файла):

```bash

set /p Var=<resultat.txt

echo %Var%

cmd /k

Также, если вы используете type для печати содержимого текстового файла, есть странное форматирование, что указывает на то, что он не обрабатывается правильно.


Get-Content -Path путь\файл.txt | Out-File -FilePath путь\новый_файл.txt -Encoding <кодировка>

Используя Notepad++, я провел некоторые исследования, какую кодировку мне нужно получить?

UTF-8 (без BOM), которая эквивалентна ANSI в Notepad, это кодирование, которое мне нужно, загрузка текстовых файлов в переменные, и команда type работают отлично, когда используется эта кодировка. Как я это понял? Если я открываю конвейерный текстовый файл в Notepad и повторно сохраняю его в кодировке ANSI, все работает отлично.


-Encoding ascii

Интересно: если я повторно сохраню конвейерный текстовый файл в Notepad как unicode, это производит файл UTF-16 LE BOM, который работает с вышеуказанным параметром преобразования, чтобы создать идеальный файл UTF-8. На этом этапе я расширил свои исследования и задал вопрос Как я могу добавить BOM к кодировке UTF-16 LE? Поскольку я мог бы сочетать такие знания с знаниями powershell. Однако, спойлер: я не смог найти приличный ответ.


-Encoding utf8

Итак, чтобы подытожить:

  1. UTF-16 LE – Windows(CR LF) прямо в UTF-8 – Windows(CR LF)

  2. UTF-16 LE – Windows(CR LF) в UTF-16 LE BOM – Windows(CR LF)

Оставьте комментарий