4

デフォルトのロケール「POSIX」を使用して、Linuxサーバー上でJavaWebアプリケーションを実行しています。一部のクライアントは、ファイル名にASCII以外の文字を含むファイルをアップロードします。これらの非ASCII文字はユニコードでJavaに保持できますが、ファイルシステムのデフォルトロケールは非ASCII文字をサポートしていないため、アップロードしたファイルを実際にファイルシステムに保存すると、それらは失われます(保存されたファイル名には多くの疑問符が含まれます)。アスキー文字。Javaでファイルを保存する前に、ファイル名(コンテンツではない)にcharセットを指定する方法はありますか?

4

2 に答える 2

3

移植性のあるJavaAPIには、移植性がないため、ファイルシステムの文字エンコードの概念がありません。たとえば、Windowsは、ロケールに関係なく、ファイル名をUnicodeとして保存します。ただし、Linuxでは、LC_CTYPEロケールのファセットによってファイルシステムのエンコーディングが決まります。したがって、Javaアプリケーションを起動するLC_CTYPE=en_US.utf8に環境をエクスポートまたは類似させることにより、アプリケーションはそれをファイル名の処理に使用します。

file.encodingは効果がないことも参照してください。この変換の背後にある内部のいくつかについて説明する、LC_ALL環境変数が効果を発揮します。

于 2012-10-24T06:39:30.603 に答える
0

ファイルが別のアプリで使用するためにアップロードされるのではなく、完全にアプリの制御下にある場合は、ファイルを保存する前に、ファイル名を独自にエンコード/デコードすることを検討します。たとえばURLEncoder.encode(filename, "UTF-8")、ユーザーが指定した名前を自分の名前にマッピングします。ディスク上で使用でき、URLDecoder.decode(encodedName, "UTF-8")その逆も可能です。

于 2012-10-24T07:54:12.613 に答える