MW211 EXIT

devlog
Windowsバッチ/文字コード
2014年08月02日
UTF-8で記述したバッチファイルを実行した場合、
文字コードをUTF-8と宣言した場合(「chcp 65001」)は
正しく出力される
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│echo アップ> out.txt                                                        │
├──┬───────────────────────────────────┤
│結果│E3 82 A2  E3 83 83  E3 83 97   0D 0A  (アップ+CRLF)                  │
└──┴───────────────────────────────────┘

しかし宣言しなかった場合は、一部正しく出力されない。
┌──────────────────────────────────────┐
│REM chcp 65001                                                              │
│echo アップ> out.txt                                                        │
├──┬───────────────────────────────────┤
│結果│E3 82 A2  E3 83 81  45 81 45   0D 0A   (ア文字化け)                   │
└──┴───────────────────────────────────┘
正しく出力されるのもあるので厄介。
恐らく基本正しく認識されるのだろうが、一部前後関係で誤認識するようだ。

但し、psql(PostgreSQL)で、SQL文中に日本語文字をベタ書きすると
エラーとなってしまうようだ。
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│psql … -c "SELECT 'あ';"> out.txt                                          │
├──────────────────────────────────────┤
│ERROR:  invalid byte sequence for encoding "UTF8": 0x82                     │
└──────────────────────────────────────┘

既定のsjisに戻してあげれば(「chcp 932」)回避できる。
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│chcp 932                                                                    │
│psql … -c "SELECT あ;"> out.txt                                            │
└──────────────────────────────────────┘
なんでだろう?
分類:Windows