指定したファイルまたは入力のテキストエンコーディングを解析して出力します。
対応するエンコーディングは、UTF32 UTF32BE UTF16(Unicode) UTF16BE UTF8 JIS(ISO-2022-JP) EUC-JP Shift-JIS ASCII です。
UTF32 UTF32BE UTF16 UTF16BE については、BOM 付きのもののみ対応しています。UTF8 は BOM が無くても解析可能です。
用例
用例1: ファイルのエンコーディングを求める
PS> Resolve-Encoding sample.txt | Select-Object EncodingName
EncodingName
———-
日本語 (EUC)
用例2: 入力のエンコーディングを求める
PS> Get-Content sample.txt -Encoding Byte | Resolve-Encoding | Select-Object EncodingName
EncodingName
———-
日本語 (EUC)
詳しくは Get-Help Resolve-Encoding をご覧ください。
実装
各エンコーディングに対し、入力されたデータが「そのエンコーディングである(成功)」「そのエンコーディングではない(失敗)」「まだわからない(解析中)」の三種類で判定するオートマトンをそれぞれ作成しし、1 バイトずつ順に入力していきます。
最初にどれか一つのオートマトンが成功状態になれば、以降の入力をキャンセルし、成功したオートマトンのエンコーディングを出力します。
失敗したオートマトンはリストから削除し、以降入力を与えません。
入力が終了した時、残ったオートマトンの中で最も優先順位の高いものを出力します。
「高度な関数」(Get-Help about_functions_advanced)を使用していますので、PowerShell 2.0 以上でないと動作しません。
追記
2012年11月20日 (改良版)が存在します。そちらをお使いください。