Functions/Data/Get-FileEncoding.ps1
Function Get-FileEncoding { [CmdletBinding()] param ( [Alias("PSPath")] [Parameter(Mandatory = $True, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)] [String] $Path, [Parameter(Mandatory = $False)] [System.Text.Encoding] $DefaultEncoding = [System.Text.Encoding]::ASCII ) process { $File = get-item $Path [Byte[]]$bom = Get-Content -Encoding Byte -ReadCount 4 -TotalCount 4 -Path $Path $encoding_found = $false $EncodingRefs = $Global:PS_FileEncodings | where PSName -notin ("string","bigendianUTF32") $Encodings = foreach ($Ref in $EncodingRefs) {([System.Text.Encoding]::GetEncoding($REF.BodyName))} foreach ($encoding in $Encodings) { $preamble = $encoding.GetPreamble() if ($preamble) { foreach ($i in 0..$preamble.Length) { if ($preamble[$i] -ne $bom[$i]) {break} elseif ($i -eq $preamble.Length){$encoding_found = $encoding} } } } if (!$encoding_found){$encoding_found = $DefaultEncoding} [pscustomobject]([ordered]@{ Name = $File.name EncodingBN = $Encoding_found.BodyName EncodingPS = ($EncodingRefs | where bodyname -eq $Encoding_found.BodyName).Psname Path=$File.FullName }) } } |