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