月別アーカイブ: 2011年12月

テキストエンコーディングの自動解析

指定したファイルまたは入力のテキストエンコーディングを解析して出力します。

対応するエンコーディングは、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日 (改良版)が存在します。そちらをお使いください。