倉金家ホームページ趣味の部屋/ホームページ余話
| ||||||
その昔ホームページを作っていて、ファイル名に日本語を使うとうまく表示できないという問題をさんざん経験しました。サーバーはVineLinux4で言語エンコーディングはEUC-JP、表示するパソコンはWindowsで言語エンコーディングはShift-JISでしたので、あまり深くも考えず言語コードが違うのだから当然だろうと思っていたのですが、ホームページ遊びを始めて幾星霜、少し利口になった今、当時の技術が未熟だっただけで「もしかしたらできるかもしれない」と思うようになり、ちょっと試してみたくなりました。
| ||||||
| ||||||
日本語のページ名をつけてみる 現在このサイトを作成、表示しているホームページプログラム"IRORIBATA"にはページアドレスに名前をつける機能があります。名前をつけなければ記事の作成順のid番号が使われて、"index.html?id=150" といったページアドレスになるだけで、どちらでもかまわないのですが、英語は得意でないしめんどうなのであまり名前はつけていません。
名前はサーバー内部だけのことを言うなら英語でも日本語でもかまわないはずです。(システムはUTF-8で言語設定は英語と日本語になっていますので、それ以外の中国語だロシア語だとなるとうまく表示できないと思いますが。) で、ためしにこのページに日本語のページ名をつけてみます。「日本語のページアドレス.htm」としてみます。「アドレス」の部分はわざと問題が多いといわれる半角カタカナにしてみました。(→あとでメールのところで半角がだめだったので全角に変えましたが。) →問題ありません。デスクトップや内蔵のブラウザでもちゃんと表示されます。サーバー内部のことだけ言えば問題はなさそうです。 | ||||||
日本語ファイル名の写真をいれてみる ついでにファイル名に日本語を使った場合の問題点も検討してみます。
具体的には日本語の名前のついた写真をページに掲載、ちゃんとアクセスできるかを調べます。 実はその昔写真のファイル名に日本語を使うとだめだった経験があるのですが、その頃は受け取ったファイル名をそのまま使っていました。WindowsパソコンからShift-JISのファイル名を受け取ってもそのまま使ってしまっていたのです。でも少しお利口になった今はサーバーに合わせてちゃんとUTF-8に変換してから使っています。 | ||||||
OKです。 ちゃんと写真は入り、かつ表示されました。クリックすると拡大写真も表示できます。 WindowsマシンからアクセスしてもLinuxマシンからアクセスしても問題ありません。Macや携帯端末は持ってないので試していませんが。 | ||||||
ただしログ(HTTPサーバーapacheのログ)に記録されるファイル名が少々長くなり、見てもどのファイルだかわかりにくくなります。記録されるファイル名は、"\xe4\xba\xac\xe9\x83\xbd\xe6\x99\x82\xe4\xbb\xa3\xe7\xa5\xad.JPG"です。(これがちょっといやだね。)
| ||||||
Windowsから各種ブラウザで表示させてみる さて、日本語(UTF-8)のページリンクを書いて、WindowsマシンからInternetExplorer, Firefox, Google Chrome, Safari, Operaでアクセスします。左のメニュー(INDEX)のリンクをクリックして表示させてみます。
→いずれもページはちゃんと表示されます。 またブラウザのアドレスバーに表示されるアドレスは概ね"kuragane.jp/日本語のページアドレス.htm"と日本語で表示されますが、Operaで「すべてのウェブアドレスをUTF-8でエンコードする」オプションがオフだと%表示になります。 もちろんファイル名をURLエンコードし"%E6%97%...."の形にしておいてもちゃんとアクセスはできますが、ブラウザによっては表示されるアドレスも"%E6%97%...."になってしまい日本語にならないので全然おもしろくありません。これでは辞書を手繰って英語の名前を考えた方がまだましです。日本語をそのままローマ字で綴るというのもあまり賢そうに見えないのでやりたくありません。 それにしてもやはり長いログが記録されます。ログに記録されるページアドレスは、"kuragane.jp/%E6%97%....htm"となっています。日本語のファイルにアクセスされたらしいとはわかりますが、これではどのファイルだかはやっぱりわかりません。 ログを日本語で記録させようとhttpd.confの設定をいくつか試してみましたが、いまのところうまくいきません。 | ||||||
| ||||||
ブラウザに日本語ページアドレスを打ち込んでみる ブラウザのアドレスバーに日本語ファイル名のついたURLを打ち込んでみます。
いちいち打ち込むのは面倒なのでメモ帳にアドレスを書込み、それをコピーしてペーストします。 InternetExplorer8:限定付きOKです。 インターネットオプションの「UTF8のURLを送信する」がOFFになっているとだめです。Shift-JISのまま送信してしまうのでしょうか。その場合日本語の部分が"\x93\xfa\x96{\x8c........"などとなり、Error 404 Object not found!になります。 Firefox17:OKです。 ちゃんと表示されエラーはでません。 Google Chrome 23:OKです。 ちゃんと表示されエラーはでません。 Safari5:OKです。 ペーストだと勝手に半角カタカナを全角に変換されたりアドレスを打ち込むと勝手にへんな補完をされたりで手まどいましたがOKです。 Opera12:限定付きOKです。 オプションの「すべてのウェブアドレスをUTF-8でエンコードする」がONになっていないとだめです。日本語の部分が"\x1b$BF|K\8l$N%Z!......."などとめちゃくちゃな文字になってしまいサーバーからError 400 Bad request!が返ります。 アドレスバーに日本語を打ち込むのはブラウザによっては設定を確認変更する必要があります。もっともこれは自分でやっていて知っているからできるのであって、MSIEなどでファイル名にUTF-8を使わない設定をしている人にはまずアクセスできないことになります。 InternetExplorerとOperaにこの項目があります。他のブラウザには見つけません。 UTF-8を使わない設定にするとたぶんShift-JISが使われると思いますが、最近のブラウザはUTF-8がディフォルトになっているとは思います(以前試しにいろいろいじってディフォルトを覚えておらずあまり自信はない)。 | ||||||
ブックマークしてそこから表示してみる Windowsパソコンの各ブラウザでこのページをブックマークし、ブックマークから表示させてみます。
Internet Explorer:OKです。 Firefox:OKです。 Google Chrome:OKです。 Safari:OKです。 Opera:OKです。 すべてOKで、いずれもちゃんとページが表示されます。 | ||||||
日本語ページアドレスをメールで送って表示させてみる 私の使っているメールソフトはOutlookですが、Office2002のものでかなり古いですので、最新のものでは違うかもしれません。
まずはテキストモード。 通常このOutlookに "http://...." を打ち込むと自動的にリンクを形成してくれます。 Internet Explorerのアドレスバーから表示されているアドレス "http://kuragane.jp/日本語のページアドレス.htm" をコピーしてOutlookにペーストしてみます。 →うまくリンクが形成されません。 表示は "http://kuragane.jp/日本語のページアドレス.htm" となっています。つまり日本語の部分は無視され英語の部分だけにリンクが形成されています。リンクをクリックすると "http://kuragane.jp/" にアクセスしてしまいます。 自動で作成されるリンクを修正する方法がわからないのでこれ以上やりようがありません。 次にHTMLモード。 同様に日本語の部分が無視されたリンクが作られますが、手動でアドレスを指定してハイパーリンクを形成あるいは修正するのはできます。この方法でやってみます。 →やはりうまくいきません。どこかで半角カタカナの部分が全角カタカナに変換されています。どこで変換されるのかと送信済みアイテムを見ますとすでに全角カタカナになっていました。 ためしにハイパーリンクを作らず本文に単に半角カタカナを書いてメールを送ると全角になっています。自動的に変換されてしまうのですね。調べてみるとメールに使われるISO-2022-JPに半角カタカナはないのでメールソフトが全角に変換するというのが一般的な動作のようです。今まで全然知らなかった。 仕方ないので、半角カタカナはやめてページのアドレスを全て全角で「日本語のページアドレス.htm」に変更してやってみます。今度はうまくアクセスできます。 というわけで、メールで日本語のURLを知らせるのは問題が出る可能性があります。受信する側のメールソフトや設定のことも考えるとちょっと心配が残ります。 もっともこんなのはメールソフトの問題と言ってしまえばそれまでですが...。 | ||||||
FTPソフトを使ってみる いつも使っているFFFTPを使います。
ホストの設定で、ホストの漢字コードをShift-JIS、ファイル名の漢字コードをUTF-8(N)に、すなわち文字コードの指定をちゃんとやれば保存されるファイルの名前については問題ありません。 ただしページの内容についてはUTF-8以外で保存した場合リンク名がUTF-8ではないのでアクセスに問題が出ると思われます。ページの内容はUTF-8で作成もしくは変換する必要があるでしょう。(実際に試してはいませんが、たぶん。) | ||||||
ざっと(私の頭で)考えられる実用的な場面というのは以上なのですが、
結論からいうとすべてUTF-8にして半角カタカナを使わなければWEBリンクを使ったページの表示では問題はなさそうですが、アドレスを書類やメールで知らせてアドレスを打ち込んでもらう場合は要注意です。 基本的にUTF-8のサーバーを使い、ページはサーバー側あるいはUTF-8のマシンで作成。ファイル名はすべてUTF-8を使用、または変換。 Windowsマシンを使ってページを作成してFTPを使ってアップロードする時は、ページはUTF-8で作成もしくは変換、さらにFTPサーバーの文字コードにUTF-8に指定しファイル名を変換してアップロード。 UTF-8以外のサーバーだとサーバーの言語と異なるUTF-8で強引に保存すると文字化けして管理や運用がたいへんだし、そうしなければさらに出力する時もすべてUTF-8に変換する(アプリケーションでやってくれる場合はそのように指定する)必要があると思われます。実際そこまで試してはいませんが、とても面倒そうなので、今後サーバーはUTF-8を使うのがいいねということにしてお茶を濁したいと思います。 さらに言うと、私が使用したソフトにはすべて日本語が設定してあります。もしそうでない場合どうなるのかという確認はできていません。 今のところ特別な場合を除き日本語ファイル名を使うつもりはありませんが、なんとなく試してみたかったのでした。 | ||||||
追記 (2013年1月9日) 海外からいろんな情報収集ロボットがけっこうきます。
このページを追加してからページアドレスの部分にまったくわけのわからないマルチバイトのファイル名を指定してくるアクセスが出てきました。もちろん404 Not Foundでエラーになっていますが、どうがんばっても日本語には変換できません。マイクロソフト(.serch.msn.comから)のロボットでさえまちがったおかしなURLでアクセスしてきます。 こんなの: .../���������の���������������������.htm' not found or unable to stat 日本語のUTF-8というのは海外では通じないみたいです。おそらくその国独自の言語コードを使ったりして日本語を誤って解釈しそれでアクセスしてくるのではないかと思われますが、詳細は全く不明です。(同じ日本語の中でさえこういうことは起こるのだからあたりまえと言えばあたりまえかも。) こういうのはログ監視プログラムでエラーを起こし、これ以上へんなエラーログが増えるとアタックアクセス等の判定に支障をきたします。 で、Agent名を見てロボットのアクセスには日本語のページアドレスではなくページのid番号を提示することにしましたが、普通のブラウザ名を騙るロボットも多いのであまり効果はないようです。 ...日本語のページ名をつけるのはこのページだけにしておきます。 お粗末でした。 | ||||||