# encoding: ascii
# api: powershell
# title: Get-FileEncoding
# description: Get-FileEncoding function determines encoding by looking at Byte Order Mark (BOM).
# version: 0.1
# type: script
# author: Chad Miller
# license: CC0
# function: Get-FileEncoding
# x-poshcode-id: 6249
# x-derived-from-id: 6250
# x-archived: 2017-05-17T23:51:19
# x-published: 2017-03-13T22:14:00
#
#
<#
.SYNOPSIS
Gets file encoding.
.DESCRIPTION
The Get-FileEncoding function determines encoding by looking at Byte Order Mark (BOM).
Based on port of C# code from http://stackoverflow.com/questions/3825390/effective-way-to-find-any-files-encoding
.EXAMPLE
Get-ChildItem *.ps1 | select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}} | where {$_.Encoding -ne '65001'}
This command gets ps1 files in current directory where encoding codepage is not 65001
.EXAMPLE
Get-ChildItem *.ps1 | select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}} | where {$_.Encoding -ne '65001'} | foreach {(get-content $_.FullName) | set-content $_.FullName -Encoding 65001}
Same as previous example but fixes encoding using set-content
#>
function Get-FileEncoding
{
[CmdletBinding()] Param (
[Parameter(Mandatory = $True, ValueFromPipelineByPropertyName = $True)] [string]$Path
)
process {
$File = New-Object System.IO.StreamReader -arg $Path, defaultEncodingIfNoBom
$null = $File.Peek()
$encoding = FileContents.CurrentEncoding.Codepage
$return $encoding
}
}