とあるプログラムを組んでテストするのだが、うまくいかないでいた。
UTF-8 なテキストを読み込んで UTF-8 な環境の PostgreSQL のテーブルにinsert/updateするだけ。なのに更新結果を見ると文字化けしている。うーん……。
つか、マルチバイトな内容を select すると"\x1B"とかで始まってるのが謎だよな。これって ISO-2022-JP のエスケープシーケンスやんか。PHP はスクリプトそのものを EUC-JP で動かしているとはいえ、冒頭でちゃんと mb_internal_encoding("UTF-8"); してるし、つか JIS が出てくる場面ないぞ?
terminal で元ファイルを head しても文字化けせずにちゃんと表示出来るしなぁ。もちろん env で LANG=ja_JP.UTF-8 になっているのは確認済み。
……ん? ちょっと待てよ?
念のため、別マシンから slogin して、同じように元テキストを head すると……おわっ?!文字化けするやんか。nkf -Jw とかやったら、ちゃんと表示される。
げげげ! 元ファイルが JIS だったのか!
いやでも当該マシンのコンソールの terminal だと化けないのは何故?
ひょっとして GNOME の terminal って、その辺を吸収しちゃうのだろうか? 一応「端末」→「文字コードの設定」で「現在利用しているロケール(UTF-8)」なのは確認したのだけど。
うーむ、恐ろしい……。
まぁとにかくプログラムは正常に動くようになったから、結果オーライ。