Skip to main content
  1. Braindump/

PowerShell - Change file encoding (recursively)

1 min
Marcel Ryser
Author
Marcel Ryser
Software architect and tech enthusiast from Berne, Switzerland

Sometimes you face the problem that your files have the wrong encoding. If your machine got PowerShell, which is quite often the case, this is really easy.

For example: You want to change the encoding of every .java file in the current directory and all subdirectories from utf-8 to iso-8859-1:

Get-ChildItem . -include *.java -recurse | ForEach-Object {
  $inputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
  $outputEncoding = [System.Text.Encoding]::GetEncoding("iso-8859-1")
  $content = [System.IO.File]::ReadAllText($_.Fullname, $inputEncoding)
  [System.IO.File]::WriteAllText($_.Fullname, $content, $outputEncoding)
}

In variable $inputEncoding we set the encoding of all source files. With $outputEncoding you can set the encoding which you want to convert into. You can see valid encoding names in table: http://msdn.microsoft.com/en-us/library/86hf4sb8.aspx.

The Get-ChildItem is somewhat like the find command on Unix. With Get-Help Get-ChildItem you can see further information how you can find files to achieve a more specific search.