• ベストアンサー

PERL 文字コード

アップロードするファイルを指定して同じファイル名で拡張子を変えてログを出力したいのですが、半角カナなどがあると化けたファイル名になってしまいます。 どう変換すればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

半角カナのファイル名がついたファイルって今時あるんでしょうか? そのアップロードが自動的なものでなく、人間によるアップロードが引き金となるのなら アップロードをされる際にファイル名をチェックして、「半角カナのファイル名では登録できません」的なメッセージを表示して拒否したほうが良いと思います。 半角カナを受け付けたいのならば、ファイルの可搬性を増すためにもファイル名は変換したほうがいいと思います。 でないとバックアップの時にバックアップ先によっては、また問題になるかもしれませんし、ファイル名をDBに突っ込むときなど、どこかで必ずまた同じ問題で悩みます。 とりあえず、全角カナに変換したり、ユニコードにしたりすればいいとは思いますが、プレフィクス+番号にしてしまってもいいのではないかと思うのですが、どうでしょう。 元のファイル名を管理したければ、量にもよりますがファイルやDBにテーブルを1つ作って そこでその変換したファイル名と元のファイル名の対応表をつくるなどしたほうが良いのではないかと思います。 生のファイル名で中身が迅速に判断できないと困るといった場合には番号では困ってしまいますが ウェブベースで常にアクセスされるファイルなのであれば、一覧表示するときに、元のファイル名で表示すればいいだけの話ですので。 変換自体はネットにごろごろしてます。 「perl 半角カナ 変換」で検索してみてください。

nagomitei
質問者

お礼

早速のご回答ありがとうございます。 >半角カナのファイル名がついたファイルって今時あるんでしょうか? 送られてきたファイルをそのまま管理しなければならないので・・・ DB等に格納することはなく、同じ名前のログが出力できればいいのですが。 もう一度調べてみます。

その他の回答 (1)

回答No.2

一番気になるのは、そのファイル名は、保存先のOSの文字コードに一致しているのかです。 ちゃんとOSの文字コードにあわせて文字コードを変換していますか? あと、ファイル名を変更するときに1バイト文字以外がまざるとはげるなんてことはないですよね。 もし化けるようならファイル名を作る時点でバグっている可能性もあります。 前者のパターンだと、OSの文字コードを変更してあげるだけで ちゃんとしたファイル名が表示されるはず。(保存時の文字コードが違うという問題) 後者であれば、何をどうやってもファイル名は復元されないのでロジックを見直すしかないです。

nagomitei
質問者

お礼

ありがとうございました。 ファイル名は、こちらでは決められないのでOSの文字コードに合わせることはできません。 ナンバリングしてファイル管理をする方向ですすんでいます。 貴重なご意見ありがとうございました。