--- description: Кодировка и переносы строк для Windows (PowerShell) и Linux (shell) alwaysApply: true --- # Кодировка файлов (Windows / Linux) Исходники и runtime-текст должны сохраняться в кодировке, которую ожидает среда выполнения. Неверная кодировка ломает парсинг PowerShell/bash, regex по JSON и spool-файлы на диске. ## Windows — PowerShell (`.ps1`, `.psm1`, `.psd1`) | Параметр | Значение | |----------|----------| | Кодировка исходников | **UTF-8 with BOM** (PS 5.1, кириллица в комментариях и строках) | | Переносы | **CRLF** | | EditorConfig | `charset = utf-8-bom`, `end_of_line = crlf` для `[*.ps1]` | - Не сохранять `.ps1` как UTF-16 LE/BE, CP1251 или «Unicode» без явной необходимости. - JSON и текст на диск для API/SAC/spool: **UTF-8 без BOM** — `[System.IO.File]::WriteAllText($path, $text, (New-Object System.Text.UTF8Encoding $false))`. - Чтение legacy/spool: UTF-8 → UTF-16 LE (BOM `FF FE` или `{` + `0x00` в начале файла). ## Linux — shell (`.sh`, исполняемые скрипты) | Параметр | Значение | |----------|----------| | Кодировка | **UTF-8 без BOM** | | Переносы | **LF** | | Shebang | `#!/usr/bin/env bash` или `#!/bin/sh` | - Не коммитить `.sh` с **CRLF** и **BOM** — на Linux: `$'\r': command not found`, сбой shebang. - После правки на Windows: `dos2unix path/to/script.sh` или в `.gitattributes`: `*.sh text eol=lf`. ## Python, JSON, конфиги в git | Тип | Кодировка | EOL | |-----|-----------|-----| | `*.py` | UTF-8 без BOM | LF (или по `.editorconfig` проекта) | | `*.json`, `*.yaml`, `*.md` | UTF-8 без BOM | LF или CRLF по проекту | | `*.vue`, `*.ts`, `*.js` | UTF-8 без BOM | LF | ## Обязательно в репозитории - **`.editorconfig`** — явные правила для `*.ps1`, `*.sh`, `*.py`. - **`.gitattributes`** — минимум: `*.ps1 text eol=crlf`, `*.sh text eol=lf`. ## Агент 1. Перед записью файла — проверить `.editorconfig` / `.gitattributes` **текущего проекта**. 2. Если их нет — следовать таблицам выше. 3. Не перекодировать бинарники и файлы, которые уже корректны. 4. При правке PowerShell, который пишет файлы на диск (`spool`, логи, экспорт) — явно задавать UTF-8 без BOM, если файл читает другой процесс или Linux.