PowerShellで、テキストファイルの文字コードを判定したい。。。
最初、「New-Object System.IO.StreamReader("c:\test\test.txt"); 」にすぐ後に、
「$sr.CurrentEncoding.BodyName」してたんだけど、全部「UTF-8」になった。。。
MSNの「StreamReader.CurrentEncoding プロパティ」見たら、
「 StreamReader の Read メソッドを最初に呼び出した後、現在の文字エンコーディングを示す値が異なる場合があります。これは、Read メソッドの最初の呼び出しまでエンコードの自動検出が実行されないためです。」
って書いてあった。
だから、しょうがねぇと思って、間にdummyの処理として、$sr.EndOfStreamを入れてみた。
そしたら、「UTF-8」「UTF-16」が出力されたので、おお~っと喜んでたら、
「Shift_JIS」も「UTF-8」と判別されていることに気づいた・・・orz
例)
$sr = New-Object System.IO.StreamReader("c:\test\test.txt");
$flg = $sr.EndOfStream # 直後にCurrentEncodingを取得すると、全部UTF-8になるのでdummy処理を入れた。
Write-Host $sr.CurrentEncoding.BodyName
$sr.Close()
色々、探してたんだけど、やろうと思ったら、めっちゃめんどくさいことになりそうだった
(バイトで取得して、その中のコードをチェックするような・・・)
ので、妥協して「nkfツール」を使用して、文字コードを取得することにした。
これだと、ちゃんと判定できた。。。
例)
nkf.exe -g c:\test\test.txt
むぅ・・・消化不良だ・・・