2

画像ファイルをアップロードしていますが、アクセント付きの文字を操作する必要があるため、すべてをUTF-8.

この JavaScript 関数を使用してアップロードします。

     $('#files').change(function(e) {
            var formData = new FormData();
            for (var i=0; i<this.files.length;i++){
                formData.append(this.files[i].name, this.files[i]);
            }
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function(e) {
                if ( 4 == this.readyState ) {
                    showMessage("Uploaded.");
                }
            };
            xhr.open('post', 'accoms/upload.jsp', true);
            xhr.send(formData);
        }, false);

たとえば、「Björk.jpg」という名前のファイルがある場合、FireFox Firebug を使用してサーバーに送信される内容を見ると、次のように表示されます。

Content-Disposition: form-data; name="Björk.jpg"; filename="Björk.jpg"

それはサーバーが受け取るもののようです。

投稿のエンコーディングは次のように表示されます。

Content-Type    text/html;charset=UTF-8

通常の形式のデータ入力テキストを他の形式で送信すると、「Björk」という単語が正しく送信され、サーバーが受信します。

その場合のサーバー側のコードは次のとおりです。

mpp=new MultipartParser(request, 100000000);
com.oreilly.servlet.multipart.Part part;
FilePart fp=null;
String fileName="";
files=new ArrayList();
while((part=mpp.readNextPart())!=null){
    if (part.isFile()){
        fp=(FilePart)part;
        fileName=fp.getFileName();
        File file=new File(fileName);
        long size=fp.writeTo(file);
                    files.add(file);
            }
}

何か案は?

ありがとう。

4

3 に答える 3

1

API リファレンスから明らかなように、パーサーは独自のエンコーディングを使用します。

試す:

mpp = new MultipartParser(request, 100000000);
mpp.setEncoding("UTF-8");
//rest of your code

ただし、参照ではコンストラクターで渡すことをお勧めします。

mpp = new MultipartParser(request, 100000000, true, true, "UTF-8");
于 2013-04-11T19:08:26.127 に答える
0

このようにエンコーディングを設定できます

var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
// retrieve data unprocessed as a binary string
oReq.overrideMimeType("text/plain; charset=x-user-defined");

詳細については、 https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequestを参照してください。

于 2013-04-11T17:34:11.693 に答える
0

この問題は、サーバー側のコードにある可能性が最も高いです。ファイル名が UTF-8 でエンコードされていることを考慮していない可能性があります。質問に投稿したものは、名前が間違って送信されていることを示唆していません。Firebug に表示されるものは、必ずしも送信されているものではありません。リクエストを調べるときに Firebug が使用するデフォルトのエンコーディングが、ブラウザで使用されているエンコーディングと一致しない可能性が非常に高くなります。これは、Firebug でファイル名が文字化けしているように見える理由を説明します。

于 2013-04-11T18:39:40.507 に答える