我正在上传图片文件,我需要他们使用重音字符 - 所以我已经使用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);
}
}
有什么想法吗?
感谢。
答案 0 :(得分:1)
解析器使用自己的编码,如API reference中所示。
尝试:
mpp = new MultipartParser(request, 100000000);
mpp.setEncoding("UTF-8");
//rest of your code
引用建议在构造函数中传递它:
mpp = new MultipartParser(request, 100000000, true, true, "UTF-8");
答案 1 :(得分: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
答案 2 :(得分:0)
问题很可能出在服务器端代码中。也许您没有考虑到文件名是UTF-8编码的。您在问题中发布的任何内容都表明该名称发送错误。您在Firebug中看到的并不一定是发送的内容。 Firebug在检查请求时使用的默认编码很可能与浏览器使用的编码不匹配。这可以解释为什么文件名在Firebug中看起来乱码。