日本語をprintfしたときに文字化けする
OSはWindowsです。
いつものようにprintfで何かしらの日本語を出力しようとすると、文字化けが起こりました。UTF-8のものをShift-JISで読んでいるパターンの文字化けです。
PowerShellの場合
vscodeのターミナルでPower Shellを使った場合、比較的短時間で解決しました。
vscodeの設定ファイルsetting.jsonのterminal.integrated.profiles.windowsのPowerShellの欄を以下のように変えたらできました。
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
"args": ["-noexit", "chcp", "65001"]
}
要は、argsとしてchcp 65001を入れると表示する文字コードをutf-8にできるということです。
Git Bashの場合(失敗したほう)
問題はこっちで、Git for Windowsを使っている場合、Program Files/Git/にgit-bash.exeが、Program Files/Git/bin/にbash.exeがあると思うのですが、前者では文字化けしないのに後者では文字化けが起こりました。
ググるとlocaleを変えろという話がでてきたので、以下を~/.bashrcに追加しました(これではうまくいかなかった)。
export LANG="ja_JP.utf8"
Git Bashの場合(成功したほう)
いろいろ試した結果、解決方法は全然vscodeとかGit Bashとかの設定ではなく、Windows自体の設定でした。
コントロールパネルから「時計と地域」みたいなところに行って、「日付、時刻、数値型式の変更」→「管理」→「Unicodeではないプログラムの言語」→「システムロケールの変更」→「ワールドワイド言語サポートでUnicode UTF-8を使用」にチェックを入れて再起動するとうまくいきました。
どうやら、bash.exeのベースとなるコンソールソフト(みたいなもの)がShift-JISのままで、内部のbashの言語設定を変えてもその外側で文字化けが起こっていたようです。
「ワールドワイド言語サポートでUnicode UTF-8を使用」は執筆時点でまだベータの機能なので、古いプログラムが動かなくなる可能性があるそうです。他のよい方法があれば教えていただきたいです。