[英]Uploaded filename encoding issue for Japanese and Chinese
我目前正在使用jQuery-File-Upload 。 我可能會上傳一些帶有日語或中文文件名的文件,並且在瀏覽器的調試模式下,但在后端(Java)中,我可以看到文件名是例如“お疲れ様です.txt”或“測試文檔.txt” ,則它們將成為“ ...”和“ .txt”和“ ..”。
我曾經嘗試將formAcceptCharset設置為UTF-8,但是它不起作用。
題:
解析MultipartFormData時如何在Java端獲取正確的文件名?
提前致謝。
順便說一句,以下是我的數據
-----------------------------25382434931419
Content-Disposition: form-data; name="file"; filename="�疲れ様��.txt"
Content-Type: text/plain
....
添加Java代碼
實際上,我目前在Java方面什么也沒做,
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String upload(InMultiPart inMP) {
while (inMP.hasNext()) {
InPart part = inMP.next();
MultivaluedMap<String, String> headers = part.getHeaders();
String fileName = null;
if (!headers.containsKey("Content-Disposition")) {
continue;
} else {
// get the file name here
fileName = parseFileName(headers.getFirst("Content-Disposition"));
}
//.....
}
//......
}
private String parseFileName(String disposition) {
int fileNameIndex = disposition.indexOf("filename=");
if (fileNameIndex < 0) {
return null;
}
int start = disposition.indexOf("\"", fileNameIndex) + 1;
int end = disposition.indexOf("\"", start);
return disposition.substring(start, end);
}
正如Stephen C所說,可以使用過濾器來獲取正確的編碼。 我們在JBOSS 7.1.1上遇到了這個問題,並實現了一個過濾器。
在Web XML中
<filter>
<display-name>set character encoding</display-name>
<filter-name>RequestEncodingFilter</filter-name>
<filter-class>com.myapp.RequestEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RequestEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
過濾器類別:
public class RequestEncodingFilter implements Filter {
private static final String ENCODING = "encoding";
private String configuredEncoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
configuredEncoding = filterConfig.getInitParameter(ENCODING);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding(configuredEncoding);
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.