プロが教えるわが家の防犯対策術!

バックグランド実行における漢字出力不可の対策方法を教えてください。
Linux(Ecolinux9.10)で夜間自動バックアップシステムを稼動させていますが、バックアップが正常に処理されたかどうかを毎朝自分のWindowsマシン上で確認するために、記録されたファイル名を(インターネット経由で)メールにて送信しています。しかし、毎回受け取っているファイル名は漢字の部分がすべて"¥"が先頭に付いたエンコード文字となって受け取っています。
一連の処理はシェルとして、すべてスケジュール起動しています。
原因を調べたところ、作成されたファイルの中身を見るコマンドtarにてリダイレクションを使って出力したファイルが必ず化けてしまいます。コマンドラインでは、root実行すると発生するようです。また、スケジュール実行では必ず発生します。
そこで質問ですが、root環境でもしっかり漢字のまま、ファイルに出力するようにシェルを工夫する方法、または受け取ったメールを漢字にデコードされた状態になる方法を教えていただけないでしょうか?よろしくお願いします。

なお、ネットで調べた結果、シェルに"export=~"を入れて、シェルを日本語環境で動作させているつもりです。想像では、日本語ターミナル上で動作させることで問題が解決かなと思っていますが、肝心の日本語ターミナルが不明です。

A 回答 (3件)

> シェルに"export=~"を入れて、シェルを日本語環境で動作させているつもりです。



そのつもりがなってないのでしょう。
こっちでやると
LC_ALL=C tar tf test.tar
→\345\271\263\346\210\220
LC_ALL=ja_JP.UTF-8 tar tf test.tar
→平成
となります。

あるいは、\数字を変換するようなフィルタをかけるとか
LC_ALL=C tar tf ttt.tar | perl -npe 's/\\(\d+)/sprintf("%c",oct("$1"))/ge'
→平成
    • good
    • 0
この回答へのお礼

回答ありがとうございます。今朝方確認しましたところ、無事日本語表示ができました。
また、文字化けが起こった場合の回避方法も教えていただきありがとうございました。
一番手軽に文字を変換できるのがPerlだったとはと思ったほどです。(Perlをここしばらく使っていないので)

お礼日時:2010/04/16 12:30

あれ? ちょっとまった.


よく見たら, "export=~" じゃダメじゃん. 古きよき Bourne shell なら
LC_ALL=ja_JP.UTF-8; export LC_ALL
bash ならこれかあるいは
export LC_ALL=ja_JP.UTF-8
ですよね.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
チェックしたら、export LANG のパラメータミスであることがわかりました。envでしっかり確認すれば防げたミスでした。
また、何ぞの折はよろしくお願いします。

お礼日時:2010/04/16 12:32

「"¥"が先頭に付いたエンコード文字」とはどういうものでしょうか?


具体的にシェルスクリプト (not 「シェル」) を見せてもらうことはできませんか?
そもそも漢字を使わなければいいというだけの話では?
    • good
    • 0
この回答へのお礼

> 「"¥"が先頭に付いたエンコード文字」とはどういうものでしょうか?

例: 平成 → \345\271\263\346\210\220 

> 具体的にシェルスクリプト (not 「シェル」) を見せてもらうことはできませんか?

tar tvf file.gz > mail.txt

> そもそも漢字を使わなければいいというだけの話では?

複数のWindowsマシンが利用しているSambaサーバーの中身ですので、漢字は当たり前に使います。問題なのは漢字のファイル名を利用することでなくて、そのファイル名が文字化けすることです。

お礼日時:2010/04/15 12:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!