PowerShellを使ってファイルの文字コードと改行コードを変換する

Windows PowerShell を使ってファイルの文字コードと改行コードを変換する方法について紹介します。

使用環境

  • Windows 10
  • Windows PowerShell 5.1

変換方法

下記のコードは文字コードが SJIS のファイルを読み込み、改行コードを LF に変換し UTF8 の文字コードのファイルを出力する内容になります。

(Get-Content -Path "input.txt" -Encoding Default) -join "`n" `
    | % { [Text.Encoding]::UTF8.GetBytes($_) } `
    | Set-Content -Path "output.txt" -Encoding Byte

1行目

(Get-Content -Path "input.txt" -Encoding Default) -join "`n" `
  • Get-Content で読み込んだファイルを1行ずつ指定の改行コードで連結しているという内容になります。
    • -Path の値は読み込み対象のファイルパスを指定します。
    • -Encoding の値は読み込み対象のファイルの文字コードを指定します。
      • 指定できる文字コードは下記の通りです。

Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, UTF32, Ascii, Default, Oem, BigEndianUTF32 * -join の値は変換したい改行コードを指定します。

  • 最終行の文末に改行を入れる場合は、全体を()で括り、改行コードを文字列連結してください。
((Get-Content -Path "input.txt" -Encoding Default) -join "`n") + "`n" `

2行目

    | % { [Text.Encoding]::UTF8.GetBytes($_) } `
  • 1行目で出力された文字列を .NETの Text.Encoding クラスのGetBytes()を使って 1文字づつバイトシーケンスに変換していきます。
    • ここでバイトシーケンスに変換を行わないと出力後のファイルの最終行の改行コードが CRLF で出力されてしまいます。
    • UTF8 の部分は出力後の文字コードを指定します。
    • 指定できる文字コードは下記の通りです。

Unicode, BigEndianUnicode, UTF8, UTF7, UTF32, ASCII, Default

3行目

    | Set-Content -Path "output.txt" -Encoding Byte
  • 2行目でバイトシーケンスに変換したものを指定のファイルに出力するという内容になります。
    • -Path の値は出力先のファイルパスを指定します。
    • -Encoding の値は バイトシーケンスをそのまま出力するため Byte を指定します。

入力/出力ファイルの文字コードおよび改行コードの組み合わせを用途に応じて変更していきましょう。

関連記事

kiyoshin