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

标签 javascript encoding utf-8 multipartform-data

我正在上传图像文件,并且需要它们使用重音字符 - 因此我已将所有内容都使用 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 reference 可以明显看出.

尝试:

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

引用文献建议将其传递到构造函数中:

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

关于javascript - 使用 xhr 上传文件时在哪里以及如何设置正确的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15955159/

相关文章:

javascript - knockout.js:更新绑定(bind)?

javascript - 使用 javascript onclick 设置 CSS 颜色

wcf - 通过 WCF 发送二进制数据 : binary vs MTOM encoding

Python邮箱编码错误

javascript - JSON基本错误

javascript - 如何从数组构建 Observable 并以 1s 的间隔发射项目?

java - 在 Maven 项目中更改编码(CP-1252 到 UTF-8)时,我应该如何处理编码为 iso-8859-1 的 XML 文件

php - 再次... php-mysql 导出 UTF-8 问题

mysql - Unicode解码错误: 'utf8' codec can't decode byte

python - perl如何设置编码?我想创建一个具有特殊名称的目录