Help us understand the problem. What is going on with this article?

PowerShellでOut-Fileが文字化けするときの対処法 | 新人SEの備忘録

More than 1 year has passed since last update.
本記事は未解決記事です。ご了承ください。解決方法を試しながら随時編集します。
また、解決方法をコメントでいただけると大変助かります。

SEに必須のドキュメント作成を、なんとか自動化できないかと目論んでいます。
PowerShellで出力したデータをExcelのマクロで動かすために、[日付 + 日本語]で出力できるソースを開発しています。

# 年月日の情報を取得
$date = Get-Date -Format "yyyyMMdd_HHmm"

# tempフォルダを作成
New-Item C:\temp_$date\ -ItemType Directory
cd C:\temp_$date\

# ~ 中略 ~

# パッチ情報の更新日を記載
$patchdata = Get-Date -Format "yyyy/MM/dd"
"$patchdata 時点(構築時点)での最新HotFix" | out-file status.csv -Append

出力ファイルをOut-Fileコマンドを使用してCSVファイル出力すると文字化けを起こします。
Excelでも同様の文字化けを起こします。

2019/10/29 譎らせ・域ァ狗ッ画凾轤ケ・峨〒縺ョ譛€譁ーHotFix

色々調べると、メモ帳では文字コードにUTF-8(Shift-JISから移行したっぽい?)が使用されていることが問題みたいでした。
そこで、検証用のコードを作成しました。
-Encoding default でShift-JIS出力、-Encoding UTF-8 でUTF-8出力が可能です。

# 年月日の情報を取得
$date = Get-Date -Format "yyyyMMdd_HHmm"

# tempフォルダを作成
New-Item C:\temp_$date\ -ItemType Directory
cd C:\temp_$date\

# ~ 中略 ~

# パッチ情報の更新日を記載
$patchdata = Get-Date -Format "yyyy/MM/dd"
"$patchdata 時点(構築時点)での最新HotFix" | out-file status.csv -Append
"$patchdata 時点(構築時点)での最新HotFix" | out-file status.csv -Encoding default -Append
"$patchdata 時点(構築時点)での最新HotFix" | out-file status.csv -Encoding UTF-8 -Append

結果は惨敗でした。
改行をしていないのでより変になっていますが、すべての文字コードで失敗していることは分かります。

2019/10/29 譎らせ・域ァ狗ッ画凾轤ケ・峨〒縺ョ譛€譁ーHotFix
〲㤱ㄯ⼰㤲芙苧膹衅꟦覯駦릂䖁ꞁ臣肜雦䢰瑯楆൸

現在は文字化けしない手段を探しています。

KentaKimura
高専機械学科が入社1年目からIT業界に就職。 職種は主にバックエンドエンジニア。 知識ゼロで入社したため、とてもつらい。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away