2017-07-19 11 views
0

私はSpringブートアプリケーションでMimeMessageHelperというメールを送信しています。Spring MimeMessageHelper添付ファイル名のエンコーディング

àという文字が含まれているファイル名を正しくエンコードするように指示するにはどうすればよいですか?

MimeMessageHelperを作成するときにエンコーディングをUTF-8に設定しても、効果がありません。 Gmailでは添付ファイルは

=?UTF-8?Q?ex-comp_s.=C3=A0_r.l.?= =?UTF-8?Q?-201\";  filename*1=\"7-07-12_=E2=80=95_2017-07-18 

答えて

0

と表示されます。ダウンロードするには、キリル文字のファイル名で同様の問題がありました。

public static String rfc5987_encode(final String s) throws UnsupportedEncodingException { 
     final byte[] s_bytes = s.getBytes("UTF-8"); 
     final int len = s_bytes.length; 
     final StringBuilder sb = new StringBuilder(len << 1); 
     final char[] digits = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 
     final byte[] attr_char = {'!','#','$','&','+','-','.','0','1','2','3','4','5','6','7','8','9',   'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','^','_','`',      'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','|', '~'}; 
     for (int i = 0; i < len; ++i) { 
      final byte b = s_bytes[i]; 
      if (Arrays.binarySearch(attr_char, b) >= 0) 
       sb.append((char) b); 
      else { 
       sb.append('%'); 
       sb.append(digits[0x0f & (b >>> 4)]); 
       sb.append(digits[b & 0x0f]); 
      } 
     } 

     return sb.toString(); 
    } 

とこのようにそれを使用します:ソリューションは、ファイル名(rfc5987)を符号化することである

private static final String CONTENT_DISP_PREFIX = "attachment; filename="; 
private static final String CONTENT_DISP_EXTRA_PREFIX = "attachment; filename*=UTF-8''"; 
private static final String USER_AGENT_FIREFOX = "Firefox"; 
... 
if (!ua.contains(USER_AGENT_FIREFOX)) { 
      response.setHeader(CONTENT_DISP_HEADER, CONTENT_DISP_PREFIX + "\"" + encodedFileName + "\""); 
     } else { 
      response.setHeader(CONTENT_DISP_HEADER, CONTENT_DISP_EXTRA_PREFIX + encodedFileName); 
     } 

私はここで、この解決策を見つけた:http://outofrange.ru/2016/11/encode-non-ascii-filename-content-disposition/

関連する問題