2013-03-12 15 views
7

Aktualnie używam urządzenia jQuery-File-Upload. Mogę przesłać pliki z japońską lub chińską nazwą pliku i widzę, że nazwa pliku to na przykład "お 疲 れ 様 す す .txt" lub "测试 文档 .txt" w trybie debugowania przeglądarki, ale w zapleczu (Java) , stają się "ã Šç-²ã,Œæ§~㠧㠙 .txt" i "æμ <è¯ • æ- ‡ æ¡ £ .txt".
Próbowałem ustawić formAcceptCharset na UTF-8, ale to nie działa.
Pytanie:
Jak uzyskać poprawną nazwę pliku po stronie Java podczas analizowania danych MultipartFormData?Przesłany kodowanie nazwy pliku dla języka japońskiego i chińskiego

Z góry dziękuję.

BTW Oto moje dane

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

Dodaj kodami Java
W rzeczywistości zrobiłem nic boku Java Obecnie

@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

pokazać kod java – Esailija

+3

Nie jestem pewien, ale nie są japońskie/chińskie znaki 'kodowane UTF-16' ? – Rob

+1

@Rob Wszystkie kodowania Unicode ('UTF's) mogą z definicji kodować wszystkie znaki Unicode. Są one zoptymalizowane tylko dla różnych przypadków. – Esailija

Odpowiedz

1

Jako Stephen C powiedział Filtr może być użyty do uzyskania odpowiedniego kodowania. Mieliśmy ten problem na JBOSS 7.1.1 i zaimplementowaliśmy filtr.

W XML Web

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

Klasa filtra:

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

}