英語以外のファイル名を扱う場合。英語以外のファイル名のアクセス方法
問題は私のプログラムがそれらのディレクトリを保証することができず、ファイル名が英語であることです。日本語、中国語を使用するファイル名は '?'のような文字を表示します。
誰でもワット私を提案することができ、私はJavaがネイティブにUnicodeを使用して英語以外のファイル名に
英語以外のファイル名を扱う場合。英語以外のファイル名のアクセス方法
問題は私のプログラムがそれらのディレクトリを保証することができず、ファイル名が英語であることです。日本語、中国語を使用するファイル名は '?'のような文字を表示します。
誰でもワット私を提案することができ、私はJavaがネイティブにUnicodeを使用して英語以外のファイル名に
私のプログラムでは、これらのディレクトリとファイル名が英語であることを保証できないという問題があります。ファイル名が日本語を使用する場合、中国語の文字はに '?'のような文字が表示されます。
明らかに、 "it"はファイル名を表示するために間違った文字セットを使用しています。その解決策は、 "it"があなたのプログラム(GUI経由)、他のアプリケーション、コマンドシェル/ターミナルエミュレータ、またはユーザのウェブブラウザであるかどうかによって決まります。より多くの情報を提供できるなら、多分私はいくつかの提案を提供することができます。
しかし、文字を下線に変えることは、おそらく悪い解決策です。ファイル名の衝突につながる可能性があり、これらの中国語/日本語/その他の文字は、ファイルを作成した人にとって意味がありそうです。
ところで、「英語」の文字の正しい用語はラテン語です。あなたのユースケースについては
EDIT
、あなたは付属のファイル名とは関係を負担するファイル名を使用してPDFファイルを保存しません。ラテン数字と(例えば)currentTimeInMillis()
から生成された文字からなるファイル名を使用して、この問題を解決しようとすることをお勧めします。それが失敗すると、本当の問題はファイル名とまったく関係がありません。
EDIT 2
あなたは声明これは、MIME encoded-word
形式でファイル名を選択解除しようとしているように見える
if (fileName.startsWith("=?iso-8859"))
について尋ねます。 RFC 2047 Section 2
まず、コードが不要かもしれないと思います。 javadocは具体的ではありませんが、私はPart.getFilename()
メソッドははファイル名のデコードを扱うべきだと思います。
第2に、デコードが必要な場合は間違った方向に進むでしょう。文字セットの後のものは単にファイル名の値として扱うことはできません。 RFCを見てください。
第3のが必要な場合は、関連するMimeUtility
メソッドを使用して、ファイル名のように "単語"トークンをデコードする必要があります。
第4に、ISO-8859-1は、ラテン文字以外の文字セットの文字には適していません。
最後に、あなたがデコードし、ファイル名は「=?ISO-8859-1のように見える場合
Content-Disposition: attachment; filename=...
を開始ヘッダ行を探ししようとしている電子メールの生のEメールヘッダを調べます?。 .. "、ファイル名には日本語/中国語/その他の文字が含まれているはずですが、問題はメールを作成したクライアント(または何でも)にあります。文字セットは "utf-8"または他のマルチバイト文字セットの1つである必要があります。
yes stephen u r correct – vijay
メールに添付されているpdfファイルにアクセスしようとしていますが、このメール添付ファイル名が正常な英語であればうまくいきます。それは非英語私のプログラムが付属していた場合、それを読み取ることができません、この – vijay
私functionis(パート部分、文字列strFolderName) は例外 を{ が { sFn_logFetchMailErrMsg( 「saveAttachmentsを試してみてください投げます(パートパート、文字列strFolderName):開始 "、 "情報 "); sFn_logFetchMailErrMsg( "ファイルは" + strFolderName、 "DEBUG"にダウンロードされます。 マルチパートmultipart = null; Part subPart = null; 文字列strDisposition = part.getDisposition(); オブジェクトobjContent = part.getContent(); – vijay
これはどの言語とプラットフォームですか? –
あなたの問題は何ですか?あなたは特殊文字を置き換えているようですので、問題は何ですか? –
私はここで鈍くなるでしょう。あなたはあなたのプログラムが何をしているのか、どこに問題があるのかを正確には明らかにしていません。ファイル名の表示に問題がありますか?もしそうなら、それはどのようにファイル名を表示していますか?それはSwingアプリケーションか、Spring、JSF、Wicketなどを使用するWebアプリケーションですか?あなたが入れたコードから、私はあなたが最終的にANSIまたはISO-8859-1文字を扱っている場合には問題を引き起こしてはならない "特殊"文字が表示されないようにしようとしていることを推論することしかできません。 –