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

На этом форуме я видел несколько отличных решений для преобразования в UTF-8 без спецификации. Мне нужно иметь возможность рекурсивно конвертировать серию файлов как таковых, используя powershell или что-то подобное.

Если я возьму документ UTF-8 и преобразую его в UTF-8, символы будут закодированы дважды. Есть ли способ предотвратить такое поведение или определить, является ли файл уже UTF-8 без спецификации?

foreach($i in ls -recurse -filter "*.*") {
    if (
        $i.Extension.ToLower() -eq ".html" -or 
        $i.Extension.ToLower() -eq ".htm" -or 
        $i.Extension.ToLower() -eq ".php" -or 
        $i.Extension.ToLower() -eq ".txt"
    ) {
        $MyFile = Get-Content $i.fullname 
        [System.IO.File]::WriteAllLines($i.fullname, $MyFile)
    }
}

person Davin    schedule 05.11.2012    source источник


Ответы (1)


Вы можете указать кодировку для Get-Content:

Get-Content $i.FullName -Encoding UTF8
person Joey    schedule 05.11.2012
comment
Что делать, если я не знаю кодировку. У нас может быть несколько файлов, уже закодированных как UTF-8. Большинство для первого прохода будет ANSI (Windows). - person Davin; 05.11.2012