- 【最強CUI】PowerShell -Part 1
203 :デフォルトの名無しさん[]:2014/05/21(水) 01:04:44.83 ID:sYItXBaD - utf8を出力するコマンドを扱うのは厄介で
普通に実行すると、utf8がsjisに文字化けした文字列が出力され、 これを > しようもんならさらにutf-16leでエンコードされて涙目になる。 > そもそも自分でエンコーディング指定しない状態でうまくいくと思うのがおかしくね なんていう話ではない>>191>>192 これ(utf8がsjisに文字化けした出力)をファイルに落として(sjisでエンコード指定(Default)) Get-Contentで読み込む(utf-8でエンコード指定)と 文字コードはあってるのにバイトが欠けたような化け方をして元のコードには戻らない。 cmd.exeのutf-8→sjisの変換(iconvとかnkf)ではそんなバイト欠けしないので 暗黙の多重エンコードのせいでバグのような挙動になってるのだろう。 get-content でutf8なファイルを-Encoding utf8指定して読み込むとすべてうまくいくので コマンドにもutf8でエンコードで指定できればうまくいきそうではある。 でもコマンドにはエンコード指定ができないのだ。 これはcmd.exeと一緒なので普通なんだけど。 cmd.exeでutf8を扱うのはXPからの悲願だったわけで sjisに化けた文字をどうこうするよりやはり生のutf-8を出力してもらうのが最善であろう Diagnostics.ProcessStartInfoのStandardOutputEncodingを設定すれば ナマのutf-8を吐いてくれる。 つまり、Diagnostics.ProcessStartInfo の設定してとあるutf-8出力コマンドに 引数を渡すラッパをpowershellスクリプトで書けばいい 手間といえば手間だが cmd.exeでutf8を扱うのはXPからの悲願だったわけで 必要な手間だといえる
|
|