powershellで日本語の文字コードを指定する

現象

powershellで出力するログファイルをCloudWatch Logsに転送し、AWSコンソール上で文字化けしてしまいました。

原因分析

以前の記事で下記のような記載があり、それを参考に見てみます。
原因はCloudWatchエンコード値と転送対象ログファイルのエンコード一致していないからです。

参考リンク:
https://cloud5.jp/windows-aws-cloudwatch-logs/

CloudWatch エージェント設定ファイルの確認

確認すると、下記のようになっています。
・CloudWatchエンコード値:shift_jis
・転送対象ログファイルのエンコード:Unicode

※CloudWatchエンコード値:指定できる値は以下のとおりです。
デフォルト値は utf-8 です。

ascii, big5, euc-jp, euc-kr, gbk, gb18030, ibm866, iso2022-jp, iso8859-2, iso8859-3, iso8859-4, iso8859-5, iso8859-6, iso8859-7, iso8859-8, iso8859-8-i, iso8859-10, iso8859-13, iso8859-14, iso8859-15, iso8859-16, koi8-r, koi8-u, macintosh, shift_jis, utf-8, utf-16, windows-874, windows-1250, windows-1251, windows-1252, windows-1253, windows-1254, windows-1255, windows-1256, windows-1257, windows-1258, x-mac-cyrillic

解決方法

原因を特定できました。次に解決方法を探します。
下記のようにすれば解決できます。
・転送対象ログファイルのエンコード:Unicode

・転送対象ログファイルのエンコード:shift_jis

powershellで日本語の文字コードを指定する方法

Shift_JISで出力するには、以下のようにします。
「-Encoding default」オプションを追加する

Write-Output あいうえお | Out-File test.txt -Encoding default

まとめ

Windowsのデフォルト文字コードはShift_JISであり、powershellなどでログを出力するときに、デフォルト文字コードに合わせることをお勧めします。

以上となり、お役に立てれば幸いです。

Last modified: 2021-04-25

Author