2013-08-05 54 views
17

Tôi đang cố gắng để người dùng tải xuống tệp excel bằng tên tiếng Nhật. Có vẻ như nó hoạt động IE 8 chỉ và IE và firefox khác, nó không hoạt động. Vui lòng đề nghị tôi làm thế nào để có được điều này.Tên mã hóa UTF-8 trong tập tin tải về

String fileName = dateString+"_マイページ情報.xls"; 
byte[] data = writer.getData(); 
response.setContentType("application/ms-excel"); 
response.setContentLength(data.length); 
response.setHeader("Expires:", "0"); // eliminates browser caching 
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName)); 

Trả lời

9

Sử dụng phương pháp setCharacterEncoding:

Thiết lập mã hóa ký tự (MIME charset) của phản ứng được gửi cho khách hàng, ví dụ, để UTF-8. Nếu mã hóa ký tự có đã được setContentType (java.lang.String) hoặc setLocale (java.util.Locale) đặt, phương thức này sẽ ghi đè nó. Gọi số setContentType (java.lang.String) bằng chuỗi văn bản/html và gọi phương thức này bằng chuỗi UTF-8 tương đương với gọi setContentType bằng chuỗi văn bản/html; charset = UTF-8.

Phương pháp này có thể được gọi nhiều lần để thay đổi mã hóa ký tự. Phương pháp này không có hiệu lực nếu nó được gọi sau khi getWriter đã được gọi hoặc sau khi phản hồi đã được cam kết.

Sửa đổi mã của bạn với sau:

response.setContentType("application/ms-excel; charset=UTF-8"); 
response.setCharacterEncoding("UTF-8"); 
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName, "UTF-8")); 
29

Tôi đã giải quyết nó như sau.

fileName = dateString+"_マイページ情報.xls"; 
fileName = URLEncoder.encode(fileName,"UTF-8"); 
try { 
     response.setContentType("application/ms-excel; charset=UTF-8"); 
     response.setCharacterEncoding("UTF-8"); 
     if(browserType.equals("IE")||browserType.equals("Chrome")) 
      response.setHeader("Content-Disposition","attachment; filename="+fileName); 
     if(browserType.endsWith("Firefox")) 
      response.setHeader("Content-Disposition","attachment; filename*=UTF-8''"+fileName); 
    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
+1

@zawhtut, những gì mã nào bạn sử dụng để có được những loại trình duyệt? –

+1

request.getHeader ("Tác nhân người dùng"); Tôi nghĩ. Nó được một thời gian dài tôi đăng câu trả lời này và bây giờ không thể nhớ nhiều. – zawhtut

+0

Bài đăng trên blog này rất hữu ích trong khi giải quyết các loại vấn đề này http://blogs.msdn.com/b/ieinternals/archive/2010/06/07/content-disposition-attachment-and-international-unicode-characters.aspx và để biết chi tiết trình duyệt http://www.fromdev.com/2009/06/dealing-with-different-client-browsers.html – rakeeee

-1

Không cần phải thiết lập setCharacterEncoding và tất cả những gì chỉ cần thêm bên dưới dòng tác phẩm của mình tốt.

String fileName = URLEncoder.encode(fileName, "UTF-8"); 
response.setHeader("Content-Disposition","attachment; filename="+fileName); 
+1

mã của bạn không hoạt động ít nhất trong FF. – nllsdfx