e日記風 独り言

#気まぐれ & 気まま & 天邪鬼な老いぼれ技術屋の日々の記録のうち、主に Perl・CGI・HTMLなど Web技術に関連した記事です。
右端上端の同一カテゴリージャンプボタンで同じカテゴリーの他の記事を順番にご覧いただけます。
Access Counter:  総アクセス数

楽 天 の 商 品

-2231- HTMLでのファイル名の漢字文字コード
= 今日は画像なし m(_ _)m =
htmlページでファイルのリンクを貼る際に imgタグや aタグで <a href="参照ファイル名.html"></a> などとやるが、実際のファイルパスにはほとんど半角文字を使っている。しかし最近 ディレクトリ内の 画像ファイルをリストする Perlスクリプトを書いた際に、画像ファイル名の中に一部漢字が使われていて、そのファイルが表示されずファイル名も文字化けしてしまった。そうしたファイルは多くはないので無視しても良かったが、何とか表示しようとしてハマってしまった。
あれこれトライ・アンド・エラーしたが結論から言えば、ファイルをアップロードする際の文字コード指定と、それを参照する側のhtmlファイルを保存する際の漢字コードが一致していないとリンク切れになってしまう、という当然のことだった。
FFFTPのファイル名文字コード指定

ただ、ファイルをアップロードする FFFTPの「ファイル名の文字コード」の指定が「自動」になっていて気づくのが遅れたり、httpプロトコルの理解が浅かったため紆余曲折してしまった。
FFFTPでアップロードするファイル名の文字コード指定が「自動」の場合、すでにアップされている漢字ファイル名の文字コードは確認のしようがない。(漢字コードを「UTF-8」などに指定して同名ファイルをアップロードしようとすると 漢字コードとファイル名が一致していれば「同名のファイルが存在する」という警告が出るので一つづつは確認可能だが)
そこで 以下のような Perlのスクリプトを実行してファイル名の漢字コードを「推定」してみた。
use utf8;
use Encode::Guess qw/cp932 euc-jp 7bit-jis utf8/; #文字コードの候補を指定して use する
use Encode 'from_to';
my $dir = "../../../path/";
my ($fh, $fnstr, $path);
chdir($dir);
my @file = glob "*.JPG ";
print 'Content-type: text/html;\n\n';
print '<!doctype html> <html lang="ja"> <head> <meta charset="shift-jis"> </head>';
my $os = $^O;
print "<body><h2>Display file name character code</h2> O/S: $os<br>\n";
print "character code of this page : Shift-jis <br>";
print "directory: $dir ;;; File: @file<br>";
foreach my $fname (@file){
my $genc = guess_encoding($fname);
$path = $dir . $fname;
if($genc->name eq 'cp932'){
print "<img src=\"$path\" style=\"width: 300px;\"><br>\n";
# from_to($fname, 'shift-jis', 'UTF-8');
printf 'File name %s is<b> %s </b><br>', $fname, $genc->name;
}else{
print "<img src=\"$path\" style=\"width: 300px;\"><br>\n";
my $fnameorg = $fname;
from_to($fname, 'UTF-8', 'Shift_JIS');
printf 'File name %s (%s :Shift-jis) is<b> %s </b><br>\n',$fnameorg, $fname, $genc->name;
}
}
print "</body></html>";
このhtmlページは Shift-jisで保存したので<img> タグで指定された SHIFT-JIS(cp932)のファイル名の画像ファイルは表示されるが UTF-8でアップされた画像ファイルは表示されない。HTMLヘッダーの charset="shift-jis"を utf-8に変えて 19行目の from_to の #を外して、代わりに24行目の行頭に #を追加して UTF-8で保存し直して実行すれば逆に UTF-8でアップされた画像ファイルが表示される。
2022/03/29


このページ(pdiary_2231.html)にコメント/質問をどうぞ
タイトル(30文字以内)
コメント
お名前(ID:10文字以内)
URL(HP or ブログをお持ちの方)
パスワード*
タイトル・コメント・ID は必須です
このページ(pdiary_2231.html)への今までのコメント/質問
このページにはまだ表示できる投稿がありません。

Back to Page top