2013-03-12 15 views
7

Şu anda jQuery-File-Upload kullanıyorum. Bazı dosyaları bir Japonca veya Çince dosya adıyla yükleyebilirim ve dosya adının, örneğin, tarayıcının hata ayıklama modunda "お 疲 れ で で す .txt" veya "测试 文档 .txt" olduğunu, ancak arka planda (Java) olduğunu görebiliyorum. “ã Šç – ²ã‚Œæ§˜ã §ã ™ .txt” ve “测 è¯ • æ– ‡ æ¡ £ .txt ”haline gelirler.
Bir keresinde formAcceptCharset değerini UTF-8 olarak ayarlamayı denedim ancak işe yaramıyor.
Soru:
Çoklu dosya formatı ayrıştırılırken Java tarafında doğru dosya adı nasıl alınır?Japonca ve Çince için dosya adı kodlama sorunu yüklendi

Şimdiden teşekkürler.

BTW aşağıdaki verilerim

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

Aslında Java kodlarını
Add Stephen C halen Java tarafında hiçbir şey,

@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

emin java kodu – Esailija

+3

Değil gösterir, ancak Çinli/Japon karakterler 'değildir

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

} UTF-16 'kodlanmış ? – Rob

+1

@Rob Tüm unicode kodlamaları (UTF'ler), tanım gereği tüm unicode karakterleri kodlayabilir. Sadece farklı durumlar için optimize edilmiştir. – Esailija

cevap

1

sözü vermedi gibi bir Doğru kodlamayı elde etmek için filtre kullanılabilir. JBOSS 7.1.1'de bu problemi yaşadık ve bir filtre uyguladık. Web xml olarak

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

Filtre sınıfı: