hack のためのネタ帳, etc,,,

Cygwin 1.7

とりあえず、詳細な解説は以下。
環境変数CYGWINに設定したcodepageまたはlocale系の環境変数(LC_ALL, LANG等)が影響するようだが、どうもコマンドにより影響される環境変数が違うようだ。
例えばlsはLANGの影響を受けてるが、bashやpwdはLANGとCYGWINの両方の影響受けてるとか。

LANGに関しては、使いたい文字コードに応じて以下のようにすればよい。
export LANG=ja_JP.UTF-8
export LANG=ja_JP.SJIS
CYGWINに関しても、使いたい文字コードに応じて以下のようにすれば良いようだ。
export CYGWIN=codepage:utf8
export CYGWIN=codepage:932

ただし、codepageの影響を受けるコマンドは、shellの起動時にLANGとcodepageの両方が設定されている必要がある模様(つまり.bashrcの中で設定したのでは手遅れ?)。

と言うことで、これらの設定は、マイコンピュータでプロパティ選んで、「システムのプロパティ」ダイアログの詳細設定タブから環境変数設定するか、cygterm.cfg で ENV_X に設定するのが良いだろう。
あとは、cygwin.bat くらいかな?

UTF-8 にしとくほうがダメ文字の心配しなくても良いけど、1.5系で作ったtarの互換性の問題もあるので悩ましい部分も。

tar

問題になるのはtarで固めたファイル。
1.5までだと、SJISでファイル名が記録されており、そのまま復元されていたのだが、1.7ではLANGとcodepageの設定によっては文字化けしてしまう。
具体的には、LANG=ja_JP.SJIS かつ CYGWIN=codepage:932 でないと文字化けする。

UTF-8で運用時の対処療法としては、展開した後にファイル名の文字コードを変換することは可能。
使えるツールとしてはconvmvがある。
使い方は、まずファイル名が正しく変換できるか確認(dry run)。
convmv -f sjis -t utf8 -r hoge/
その後、本実行。
convmv -f sjis -t utf8 -r hoge/ --notest
フラグの意味は -f が現在の(文字化け状態の)文字コード、-t が変換後の文字コード、-r は再帰処理、hoge/ は処理したいディレクトリ、--notestで本実行。

ちゃんと文字コード解してくれるアーカイバー欲し(つ ;)

参考:
2014-01-28:
現行の Cygwin64 1.7.27 を UTF-8 で運用している場合の状況
convmv では「進行状況」とか「へのショートカット」とかが上手く変換できない模様。
SJIS の tar に関しては LANG の指定だけでをきちんと展開出来ている模様。
例えば以下のような感じ
LANG=ja_JP.SJIS tar xf hoge.tgz
SJIS の tar の内容を確認する際には以下の何れかのようにすると良い。
LANG=ja_JP.SJIS tar tf original.tgz | nkf -Sw
LANG=ja_JP.SJIS tar tf original.tgz | iconv -f sjis -t utf-8
tar tf hoge.tgz | ruby -Ebinary -nle '$_.gsub!(/\\([0-9]{3})/){|v| $1.to_i(8).chr}; puts $_.force_encoding("SJIS").encode("UTF-8")'

cygterm here

TeraTerm 付属の機能だが、どうも1.7系だと調子が悪い。
〜デスクトップ/ 以下のフォルダへ cygterm here しようとすると、〜デスクトップ/ が開いてしまう。
原因調査中、、、

2010-03-18:
TeraTerm4.56で修正されたと言う情報あり。
http://slashdot.jp/~doda/journal/501006
http://slashdot.jp/~doda/journal/500996
ただしUTF8にしていると改善されるが、SJISでcodepage932の環境では改善が見られない模様。
悩ましい。

関連

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます