2

Windows クライアントから Linux サーバーにテキスト ファイルをアップロードする Java クラスがあります。

アップロードしようとしているファイルは、Cp1252 または ISO-8859-1 を使用してエンコードされています。

ファイルがアップロードされると、utf-8 を使用してエンコードされるため、éèà などのアクセントを含む文字列を読み取ることができません。

コマンド

file -i *

Linuxサーバーで、utf-8を使用してエンコードされていることがわかります。

アップロード中にエンコーディングが変更されたと思われるため、このコードをサーブレットに追加しました。

String currentEncoding=System.getProperty("file.encoding");
System.setProperty("file.encoding", "Cp1252");
item.write(file);
System.setProperty("file.encoding", currentEncoding);

jsp ファイルには、次のコードがあります。

<form name="formUpload"
action="..." method="post"
enctype="multipart/form-data" accept-charset="ISO-8859-1">

ファイルのアップロードに使用するライブラリは apache commun です。

私は本当にアイデアが不足しているので、誰も手がかりを持っています!

ありがとう、

オトマネ・マリフ

4

1 に答える 1

2

システム プロパティの設定は、file.encodingJava の起動時にのみ機能します。代わりに、次のコードでファイルを開く必要があります。

public static BufferedWriter createWriter( File file, Charset charset ) throws IOException {
    FileOutputStream stream = new FileOutputStream( file );
    return new BufferedWriter( new OutputStreamWriter( stream, charset ) );
}

パラメータとして使用Charset.forName("iso8859-1")charsetます。

[編集]あなたの問題はおそらくfileコマンドです。MacOS は、ファイルのエンコーディングを自信を持って伝えることができる世界で唯一の OS です。Windows と Linux は推測する必要があります。この推測は間違っている可能性があります。

したがって、エンコーディングを指定するエディターでファイルを開く必要があります。Windows でこれを行う必要があります (ファイルが実際に で保存されたことを確認するためですCp1252。一部のアプリケーションはプラットフォームを無視し、データを常に で保護しますUTF-8)。

また、Linux でも同じことを行う必要があります。ファイルを開くだけの場合、エディターはプラットフォーム エンコーディング (UTF-8最新の Linux システムにある) を取得し、それを使用してファイルを読み取ろうとします ->ISO-8859-1ウムラウトが文字化けします。ただし、でファイルを開くとISO-8859-1UTF-8文字化けします。これが、テキスト ファイルの実際のエンコーディングを確認する唯一の方法です。

于 2012-09-14T14:08:53.563 に答える