【PowerShell】ファイルの文字コード取得

ファイルの文字コードを調べる方法。

ファイルの取得

最初はPowerShellだけでできると思って公開したけど、無理ぽだった。
なのでDLLを追加して、それをPowerShellから実行する方法で。
参考 GitHub - hnx8/ReadJEnc: ReadJEnc C#(.NET)用ファイル文字コード種類自動判別ライブラリgithub.com

リリースページからファイルをダウンロードする。

Zipを解凍してDLLを適当なフォルダに配置。
バージョン毎にDLLが入ってると思いますが、適当なバージョンを使ってください。

インストールされている.NET Frameworkの確認は↓を参考に
https://qiita.com/asterisk9101/items/f13da78b4cb9ab6d3c4b

文字コード確認

# DLLを読み込み
[Reflection.Assembly]::LoadFile("C:\TEMP\Hnx8.ReadJEnc.dll")

$file=Get-Item "C:\TEMP\test.txt"
$reader=new-object Hnx8.ReadJEnc.FileReader($file )
$reader.Read($file)
実行結果
Name  CodePage
----  --------
ASCII        0

文字コード確認 一括

# DLLを読み込み
[Reflection.Assembly]::LoadFile("C:\TEMP\Hnx8.ReadJEnc.dll")

$targetFolder = 'C:\TEMP\TEST\';
foreach($item in Get-ChildItem $targetFolder)
{
    if($item.PSIsContainer)
    {
        # フォルダの場合の処理
    }
    else
    {
        # ファイルの場合の処理
        $file=Get-Item $item.FullName
        $reader=new-object Hnx8.ReadJEnc.FileReader($file)
        #$reader.Read($file)
        Write-Host ($file.Name + "`t`t" + $reader.Read($file).Name);
    }
} 
実行結果
1.txt		ShiftJIS
2.txt		ASCII
3.txt		UTF-8N
4.txt		UTF-8

※UTF-8 ⇒ BOM付 UTF-8 っぽい

サブフォルダも

Get-ChildItem に -Recurse つければ行ける。

foreach($item in Get-ChildItem $targetFolder -Recurse)

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください