- PR -

ダウンロードダイアログに表示する文字が、うまく表示されません。

投稿者投稿内容
かずや
会議室デビュー日: 2003/11/24
投稿数: 12
投稿日時: 2003-12-03 18:35
初めまして!!Java初級者のかずやと申します!!
是非Javaの大先輩の皆様にお教え願いたいと思います!
よろしくお願いいたします。

さて本題ですが、今私はJSPとJavabeanを用いてメールソフトを開発しています。
Javax.mailを用いて、メールに添付してある添付ファイルをダウンロードしようと、ブラウザのダイアログに添付ファイルの名前を出力させると、日本語で書かれたファイル名がうまく表示されません。(ちなみに半角英数で書かれたファイルは字化けしません。)
どうすればうまく表示されるのかを、どなたか教えてください!!

JSPのソース(ダイアログに表示させている部分)
int index = Integer.parseInt(Encode.getUnicodeString(request.getParameter("i")));
response.addHeader("Content-Disposition", "attachment; filename=\"" + mail.getMIMEFilename(index) + "\"");

Javaのソース
public String getFilename(int i) {
if (attachment == null || i >= attachment.size())
return null;
return MimeUtility.decodeText(((Part)attachment.elementAt(i)).getFileName());
}

一応上記のソースで添付ファイルを取得できるようにしています。
ちなみに使用環境は
  Tomcat1.4.0
jdk1.3.1
です。
なにぶん初級者ですので、これでうまく伝えられているのか自信がありませんが、何卒よろしくお願いします!!


[ メッセージ編集済み 編集者: かずや 編集日時 2003-12-03 18:57 ]
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2003-12-04 00:34
かずやさん、こんにちは。

引数で charsetと encodingを指定できる方の decodeText()を使用し
てはいかがでしょうか?
かずや
会議室デビュー日: 2003/11/24
投稿数: 12
投稿日時: 2003-12-05 12:17
Kissingerさん
早速のレスありがとうございます!!
そして、私のレスが遅れてしまい、大変申し訳ありません!!

>引数で charsetと encodingを指定できる方の decodeText()を使用し
>てはいかがでしょうか?

なのですが、JAVAのAPIを調べてみても、うまく探すことが出来ませんでした(TOT)
どのクラスの物なんでしょうか??APIの歩き方もまだよくわかっていません。
本当にこんな質問ですみませんm(_ _)m

さて、こちらにスレを立ててから、自分でもいくつかうまくいかないかとやってみました。
で、わかった事なのですが、とりあえず12/3に書かせていただいたプログラムで、ダイアログではなくブラウザ自身に表示をしてみますと、日本語文字がしっかりと表示されました。

ですので、添付ファイルの名前はしっかり取れているのですが、どうも私自身のソースの中でファイル名の字化けが起こっているようです(TOT)
Gordie
ベテラン
会議室デビュー日: 2003/10/14
投稿数: 64
投稿日時: 2003-12-05 12:42
こんにちは。

IEを使っているということを前提にお話しします。

http://support.microsoft.com/default.aspx?scid=kb;ja;414647
の「詳細」のところにも書かれているんですが、Content-Dispositionヘッダには本来なら日本語文字列を直接指定することはできません。
でもそれでは使いにくいので、IEは可能な限り日本語をサポートする、ということなんですが、その日本語がShift_JISなのかEUCなのかUTF-8なのかということを判断する手立てはありません。
MS製品ということもあり、日本語といえばShift_JISなのでしょう。
ページ自体の出力をShift_JISで行っていればいいのですが、そうではない場合、ヘッダを出力する時にはエンコード方式をShift_JISに変えてやらないと、IEが日本語を判別できないでファイル名が文字化けするのではないでしょうか。
かずや
会議室デビュー日: 2003/11/24
投稿数: 12
投稿日時: 2003-12-05 16:45
Gordieさん
すばやいレスありがとうございます!!

なるほど!たいへん勉強になります!!

引用:--------------------------------------------------------------------------------
ページ自体の出力をShift_JISで行っていればいいのですが、そうではない場合、ヘッダを出力する時にはエンコード方式をShift_JISに変えてやらないと、IEが日本語を判別できないでファイル名が文字化けするのではないでしょうか。
-------------------------------------------------------------------------------

Gordieさんの上記のアドバイスを参考にして、自分なりにこのような方法でShift_JISに置き換えてみたのですが、うまくいきません(TOT)

MimeUtility.encodeText(filename,"iso-2022-jp", "B").replaceAll("iso-2022-jp","Shift_JIS")

上のスレで書いたソースの返り値をいじっただけなのですが、NoSuchMethodErrorが出てきます。根本的に使い方を間違っているのでしょうか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-12-05 17:02
引用:

かずやさんの書き込み (2003-12-05 16:45) より:
上のスレで書いたソースの返り値をいじっただけなのですが、NoSuchMethodErrorが出てきます。根本的に使い方を間違っているのでしょうか?



NoSuchMethodErrorということは、コンパイルは通っているんですね?
だとするとコンパイル時に指定されているライブラリと実行時に使用しているライブラリと
バージョンが違うのではないですか?
かずや
会議室デビュー日: 2003/11/24
投稿数: 12
投稿日時: 2003-12-05 17:42
UKさん
ご指摘ありがとうございます!!

おっしゃる通りでした(汗)
本当にお恥ずかしい限りです。

また、よくよく考えてみると、
MimeUtility.encodeText(filename,"iso-2022-jp", "B").replaceAll("iso-2022-jp","Shift_JIS")
のような方法を用いらなくても、JSPの方でpageEncodingをShift_JISにすれば、よい事に気づきました(滝汗)

ダイアログの方も、この方法でうまくいきました!!
今回の件で助言を下さいました3名の皆様、また暖かい目で見守って下さいました多くの閲覧の皆様。本当にありがとうございました!!
これからも、JAVAの勉強をどんどん行い、いつかこのサイトで人にアドバイス出来るまでに成長していきたいと思いますので、これからもどうぞよろしくお願いします!!
かずや
会議室デビュー日: 2003/11/24
投稿数: 12
投稿日時: 2003-12-09 21:01
お世話になっています!!
このスレの内容に次いで、どうしてもわからない問題が出てきましたので、大先輩の皆様にお教え願いたいと思います!!

先日の方法で、ついにIEを用いた結果うまく表示する事が出来るようになったのですが、次にNetscapeを用いてダイアログに表示すると、日本語のファイル名の場合「"表示するファイル".jsp."添付ファイルの拡張子"」となってしまいます。
(ちなみに英語のファイル名の添付ファイルはしっかりと「"表示するファイル名"."添付ファイルの拡張子"」が表示されます)

いろいろな本やサイトを見て自分なりに勉強をしてみたのですが、どうしても理由とうまく表示する方法が分かりません。私はIEとはダイアログに表示する文字コードが違うからではないかと思うのですが、それを証言する本にもサイトにもたどり着けず、止まってしまっています。

スキルアップ/キャリアアップ(JOB@IT)