読者です 読者をやめる 読者になる 読者になる

ちんとんがめ♪色々備忘録・・・

なんか、メモ的な感じで使えればいいなみたいな。。。前検索したけど、忘れて同じもの検索するのって面倒だよね?・・・でも、結局検索するみたいな。。。

PowerShellで、テキストファイルの文字コードを判定したい。。。

PowerShell Windows プログラミング

最初、「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


むぅ・・・消化不良だ・・・


StreamReader.CurrentEncoding プロパティ (System.IO)

文字コード - 本当は怖くないCP932 - Qiita