Java下載文件時文件名亂碼問題解決辦法
更新時間:2013年04月16日 22:07:52 作者:
我最近在開發(fā)時遇到了文件另存為時文件名出現(xiàn)亂碼,在火狐上正常的文件名,在IE中又出現(xiàn)亂碼問題,然后好不容易在IE下調(diào)試好了文件名亂碼問題,在火狐下又出現(xiàn)亂碼,最后終于感覺這樣是能解決了。具體如下:
復制代碼 代碼如下:
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
} else {
byte[] b;
try {
b = Character.toString(c).getBytes("utf-8");
} catch (Exception ex) {
exceptionUtil.error("將文件名中的漢字轉為UTF8編碼的串時錯誤,輸入的字符串為:" + s);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0)
k += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
/**
* 根據(jù)不同瀏覽器將文件名中的漢字轉為UTF8編碼的串,以便下載時能正確顯示另存的文件名.
*
* @param s
* 原文件名
* @return 重新編碼后的文件名
*/
public static String toUtf8String(HttpServletRequest request, String s) {
String agent = request.getHeader("User-Agent");
try {
boolean isFireFox = (agent != null && agent.toLowerCase().indexOf("firefox") != -1);
if (isFireFox) {
s = new String(s.getBytes("UTF-8"), "ISO8859-1");
} else {
s = StringUtil.toUtf8String(s);
if ((agent != null && agent.indexOf("MSIE") != -1)) {
// see http://support.microsoft.com/default.aspx?kbid=816868
if (s.length() > 150) {
// 根據(jù)request的locale 得出可能的編碼
s = new String(s.getBytes("UTF-8"), "ISO8859-1");
}
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return s;
}
相關文章
詳解PipedInputStream和PipedOutputStream_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了管道PipedInputStream和PipedOutputStream,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Java Swing中的文本框(JTextField)與文本區(qū)(JTextArea)使用實例
這篇文章主要介紹了Java Swing中的文本框(JTextField)與文本區(qū)(JTextArea)使用實例,Swing是一個用于開發(fā)Java應用程序用戶界面的開發(fā)工具包,需要的朋友可以參考下2014-10-10java讀取excel文件并復制(copy)文件到指定目錄示例
這篇文章主要介紹了java讀取excel文件并復制文件到指定目錄示例,需要的朋友可以參考下2014-02-02Netty中ChannelPoolHandler調(diào)用處理程序詳解
這篇文章主要介紹了Netty中ChannelPoolHandler調(diào)用處理程序詳解,Netty 是基于 Java NIO 的異步事件驅動的網(wǎng)絡應用框架,使用 Netty 可以快速開發(fā)網(wǎng)絡應用,Netty 提供了高層次的抽象來簡化 TCP 和 UDP 服務器的編程,但是你仍然可以使用底層的 API,需要的朋友可以參考下2023-11-11java的Array,List和byte[],String相互轉換的方法你了解嘛
這篇文章主要為大家詳細介紹了java的Array,List和byte[],String相互轉換的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02