Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 日本語のディレクトリー名とファイル名で困っています ( 自己解決)



こんにちは、作山@日本総研です。

リプライありがとうございます。> togashi@xxxxxxxxxxxxx


Tue, 17 Apr 2001 11:44:34 +0900 の togashi@xxxxxxxxxxxxx さんのメッセージから
>
>解決できたのでもういいのかも知れないけどnkfでEUCに変換という手
>を使うと思っていたのですがこれは×の結論だったのでしょうか?
>(最初のメールで ls | nkf --sjis --euc
>                とすると
>   inadl.doc が JOB仕様書.doc と見える)
>と書いてあったのでそうするのがいいな?私は思っていました。

今回問題になったのは、

  ファイル名そのものがSJISな為、mknmzした結果
  がうまく使用できない、

また、

  ファイル名をeucにしてしまうと、検索結果の
  Link先にJumpできない
  (また、ブラウザーに手で漢字のURLを直接入力した場合
    クライアントがWinな場合はOKですが、
    Solarisからだとダメだったので
  IISがタコなのだと私の中では結論づけました。)

という状況だったので、

  ファイル名をエンコードする事にしました。

本来ならwgetがPathだけでなく、ファイル名もエンコードしてくれれば
問題なかったのですが...

>
>また、同様な問題に遭遇する場合もでてくるとも思いますのでそのPerlは公開
>して問題ないなら参考にしたいなぁ.....と思います

今回始めてPerlを作成したので、世の中のPerl使いな方からみると
とんでもないものだとはおもいますが、参考の為にアップします。

#ラクダさんの本はもっていましたが、今まではsed/awkですませて
#いたのでほとんど開いた事がなかったです ^_^;;

使用形態は、
  ls -1R  ./wgetでダウンしたディレクトリー | SjisConv.pl
です。

(本来なら、lsなんて使わないで全てperlでできればよいのでしょうが、
 私の力ではそこまで及びませんでした. ^_^;)

encodeすべきコード範囲かすべきでないコード範囲かは
よく分からなかったので、適当な範囲を設定してエンコード
しています。
(もしまずい点があればどなたかアドバイスをしていただけると
 助かります。でも、wgetのソースをハックしろってのは
 勘弁してください。^_^;)

-----------------------------------------------------------------
#!/usr/bin/perl
while(<>){
   chop;
   if (/^\./) {
      print 'CHECK DIR ',$_,"\n";
      $wkdir = $_;
      substr($wkdir,-1,1) = '/';
   }
   elsif (/(\/)$/) {
    print 'SKIP ',$_, "\n";
   }
   elsif (/\S/) {
      $sw = 0;
      $fromname = $_;
      @array = unpack ("C*",$_);
      $mvname = '';
      for (@array) {
         if (($_ <16) or ($_ > 122)) {
            $mvname = $mvname . '%' . sprintf ('%2.2X', $_);
            $sw = 1;
         }
         else {
            $mvname = $mvname . sprintf ('%c', $_);
         }
      }
      if ($sw == 1) {
         $mvcmd = sprintf (" mv \'%s%s\' \'%s%s\'", $wkdir, $fromname, $wkdir, $mvname);
         print $mvcmd, "\n";
         system($mvcmd);
      }
      else {
         print 'SKIP ', $fromname, "\n";

      }
   }
}
-----------------------------------------------------------------

以上、よろしくお願いします。
______________________________________________________________________
作山@日本総研              (Office) mailto:sakuyama.akio@xxxxxxxxx
TEL 03(5431)7839              (Home) mailto:sakuyama@xxxxxxxxxxxxxxxxxx
FAX 03(3422)1745                                   JWNTUG:JWNTUG001739