在使用xhr上传文件时,我在哪里以及如何设置正确的编码

Where and how do I set the correct encoding when uploading files using xhr

本文关键字:何设置 设置 编码 xhr 文件 在哪里      更新时间:2023-09-26

我正在上传图像文件,我需要它们与重音字符一起工作-所以我已经使用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);
            }
}

任何想法?

谢谢。

解析器使用自己的编码,从API参考中可以明显看出。

试题:

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

参考建议在构造函数中传递:

mpp = new MultipartParser(request, 100000000, true, true, "UTF-8");

您可以像这样设置编码

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

问题很可能出在服务器端代码中。也许您没有考虑到文件名是UTF-8编码的。你在你的问题中张贴的没有任何迹象表明名字发送错误。您在Firebug中看到的不一定是正在发送的内容。很有可能Firebug在检查请求时使用的默认编码与浏览器使用的编码不匹配。这可以解释为什么文件名在Firebug中看起来是乱码的。