• 締切済み

日本語を含むファイルへの「copy」処理

お世話になります。 現在perlにてプログラムを作っているのですが、ファイルのコピーに関してつまずいたので教えていただけますでしょうか。 formからファイルが選択されてそれが、$inputに入っているとします。 そのファイル「file」という名前でそのままコピーしたいと考えています。 そこで copy("$input", "file"); としました。 ですが、選択したファイル場所に日本語が含まれているとエラーになっているようで処理がされません。 ちなみに、日本語が含まれていないファイルに関しては問題なく動作しております。 URLエンコードが必要のようですが、いろいろ調べてもうまくいかなかったので質問をさせていただきました。 処理の前に$inputをどのようにすればいいのでしょうか。 教えていただけますでしょうか。 よろしくお願いします。

みんなの回答

回答No.3

ファイル名の文字コード(通常はOSの標準文字コードと一致するので、Windowsならsjis、Linuxならeuc)と、 "$input"に入っている文字列の文字コードを統一させて下さい。 HTMLフォームから送信されたデータは、殆どの場合、HTMLファイルの文字コードが使われます。 HTMLフォームを使って送信すると、ブラウザが自動的にURLエンコードしますので、 CGIはそれをURLデコードした後で、文字コードを変換して下さい。 URLデコードの処理はCGI.pmが、文字コードの変換はEncode.pmが使いやすいと思います。

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.2

これってローカルでの話ですよね。そしてMSIEを使っている。 だからたまたまコピーできるだけであって、ブラウザがMSIE以外だったり、リモートのファイルの場合はこの方法ではファイルコピーはできません。 MSIE以外は type属性値「file」の input にパスは入らないです。

  • MoguraSE
  • ベストアンサー率64% (81/126)
回答No.1

こんにちは。 まず、文字コードを統一してください。 日本語はJIS、Shift-JIS、EUC、UTF-8などの文字コードが散在します。 Jcodeモジュールなどで先に変換を済ませてください。 そうでないと、URLエンコードしても正常に動作しません。 次にURLエンコード/デコードですが、解説サイトがありますのでそちらを参考にしてください。 http://sonic64.com/2003-08-31.html

参考URL:
http://sonic64.com/2003-08-31.html
xHELP_MEx
質問者

お礼

お早いご回答まことにありがとうございます。 文字コードの統一はしていますが、 HTMLの出力時などに統一のものを吐くようにするなどで統一していますがそれで十分でしょうか。 また、教えていただいたサイトは確認していたのですがこれにかけてもうまく動作しませんでした。 具体的な構造がわからないのですが、これにかけるとファイル名が C%3a%5cDocuments+and+Settings%5c0000%5c%e3%83%87%e3%82%b9%e3%82%af%e3%83%88%e3%83%83%e3%83%97%5c3%2ejpg のようになってしまいますが、これで正常なのでしょうか。 ※上のを解析?すれば私のフォルダ構成がわかると思いますが解析しないでくれるとうれしいですw

関連するQ&A