vivo test resumen noticias japonesa japones japon idioma hoy habilitar guerra fisicamente entre diferencia coreano chino caracteres asiaticos java file-upload encoding character-encoding

java - test - Problema de codificación de nombre de archivo cargado para japonés y chino



noticias de japon en vivo (1)

Actualmente estoy usando jQuery-File-Upload . Puedo cargar algunos archivos con un nombre de archivo japonés o chino, y puedo ver que el nombre del archivo es, por ejemplo, "お 疲 れ txt す す .txt" o "测试 txt .txt" en el modo de depuración del navegador, pero en el backend (Java) , se convierten en "ã Šç-²ã,Œæ§~㠧㠙 .txt" y "æμ <è¯ • æ- ‡ t £ .txt".
Una vez intenté configurar formAcceptCharset en UTF-8 pero no funciona.
Pregunta:
¿Cómo obtener el nombre correcto de archivo en el lado de Java al analizar MultipartFormData?

Gracias por adelantado.

Por cierto, la siguiente es mi información

-----------------------------25382434931419 Content-Disposition: form-data; name="file"; filename="�疲れ様��.txt" Content-Type: text/plain ....

Agregue los códigos Java
De hecho, no hice nada en el lado de Java actualmente,

@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); }


Como dijo Stephen C, un filtro puede usarse para obtener la codificación correcta. Tuvimos este problema en JBOSS 7.1.1 e implementamos un filtro.

En 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>

Clase de filtro:

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() { }

}