[JAVA]異なるブラウザで添付ファイルをダウンロードする中国語名の文字化けし問題を解決する
3772 ワード
添付ファイルのダウンロード時、中国語添付ファイル名の互換性の問題に遭遇し、firefox、chrome、ieの3つの派閥は互換性がなく、分析整理を通じて、この問題を処理する方法をまとめ、以下のように記録した.
1、ファイル名コード
サーバのデフォルトはISO 8859-1ですが、javaコードではUTF-8がデフォルトで使われていますので、サーバに渡すときに変換する必要があります.
2、ブラウザによるファイル名の扱い方
マイクロソフトは添付ファイル名を扱う際に使用するURL復号処理であるため、マイクロソフト系のブラウザを個別に扱う必要がある
コードは次のとおりです.
ファイル名符号化問題の処理が完了したら、応答ヘッダに設定すればよい.
参照先:
servletのよくある文字化けしと解決方法
1、ファイル名コード
サーバのデフォルトはISO 8859-1ですが、javaコードではUTF-8がデフォルトで使われていますので、サーバに渡すときに変換する必要があります.
2、ブラウザによるファイル名の扱い方
マイクロソフトは添付ファイル名を扱う際に使用するURL復号処理であるため、マイクロソフト系のブラウザを個別に扱う必要がある
コードは次のとおりです.
public String dealAttachmentName(HttpServletRequest req, String fileName) throws UnsupportedEncodingException {
String userAgent = req.getHeader("user-agent");
boolean isMSBrowser = HttpUtils.isMSBrowser(userAgent);
// URLEncoder , "%20", "+",
return isMSBrowser ? URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20") : new String(fileName.getBytes("UTF-8"), "ISO8859-1");
}
/**
* @description:
* @projectName:mysteel-oilchem-information-columnlist
* @see:com.mysteel.oilchem.cms.web.utils
* @author:
* @createTime:2019/4/28 10:03
* @version:1.0
*/
public class HttpUtils {
private static String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};
/**
* description
* URLencoder
* param [request]
* return boolean
* author
* createTime 2019/4/28 10:05
**/
public static boolean isMSBrowser(String userAgent) {
if (userAgent != null) {
for (String signal : IEBrowserSignals) {
if (userAgent.contains(signal))
return true;
}
}
return false;
}
}
ファイル名符号化問題の処理が完了したら、応答ヘッダに設定すればよい.
response.setHeader("Content-disposition","attachment; filename=" + realFilename);
参照先:
servletのよくある文字化けしと解決方法