Проверьте, не закодирован ли файл дважды - PullRequest
0 голосов
/ 12 сентября 2018

Я использовал ответ на этот вопрос: Использование PowerShell для записи файла в UTF-8 без спецификации

для кодирования файла (UCS-2) в UTF-8.Проблема в том, что, если я запускаю кодировку дважды (или более раз), текст Cyrillic будет поврежден.Как остановить кодирование, если файл уже находится в UTF-8?

Код:

$MyFile = Get-Content $MyPath
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($MyPath, $MyFile, $Utf8NoBomEncoding)

1 Ответ

0 голосов
/ 12 сентября 2018

Использование:

$MyFile = Get-Content -Encoding UTF8 $MyPath
  • Первоначально, когда $MyPath имеет кодировку UTF-16LE (кодирование "Unicode", которое, как я полагаю, и имеет в виду), PowerShell игнорирует параметр -Encoding из-за к наличию BOM в файле, который однозначно определяет кодировку.

    • Если ваш исходный файл не имеет спецификацию, требуется дополнительная работа.
  • Как только вы сохранили $MyPath как UTF-8 без спецификации , вы должны сообщить Windows PowerShell [1] , что ожидаете Кодировка UTF-8 с -Encoding UTF8, поскольку она интерпретирует файлы как «ANSI» -кодированные по умолчанию (кодируются в соответствии с обычно однобайтовой кодовой страницей, связанной с языком устаревшей системы).


[1] Обратите внимание, что кроссплатформенная PowerShell Core редакция по умолчанию установлена ​​без спецификации UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...