2013-03-12 24 views
7

Attualmente sto utilizzando lo jQuery-File-Upload. Posso caricare alcuni file con un nome di file giapponese o cinese, e posso vedere che il nome del file è ad esempio "お 疲 れ 様 で す .txt" o "测试 文档 .txt" nella modalità di debug del browser, ma nel backend (Java) , diventano "ã Šç-²ã,Œæ§~㠧㠙 .txt" e "æμ <è¯ • æ- ‡ æ¡ £ .txt".
Una volta ho provato a impostare formAcceptCharset a UTF-8 ma non funziona.
Domanda:
Come ottenere il nome file corretto sul lato Java durante l'analisi di MultipartFormData?Problema di codifica del file caricato per giapponese e cinese

Grazie in anticipo.

BTW, Il seguente è i miei dati

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

Aggiungere i codici Java
In realtà ho niente in Java lato attualmente,

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

mostrano il codice Java – Esailija

+3

Non è sicuro, ma non sono i caratteri giapponesi/cinese '16' UTF-codificato ? – Rob

+1

@Rob Tutte le codifiche unicode ('UTF's) possono codificare per definizione tutti i caratteri Unicode. Sono semplicemente ottimizzati per casi diversi. – Esailija

risposta

1

Come Stephen C detto un il filtro può essere usato per ottenere la giusta codifica. Abbiamo avuto questo problema su JBOSS 7.1.1 e implementato un filtro.

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

Classe di filtrazione:

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

}

Problemi correlati