StringBuffer sb = StringBuffer baru();
untuk (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
jika (c >= 0 && c <= 255) {
sb.tambahkan(c);
} kalau tidak {
byte[]b;
mencoba {
b = Karakter.toString(c).getBytes("utf-8");
} catch (Pengecualian misalnya) {
pengecualianUtil.error("Kesalahan saat mengkonversi karakter Cina dalam nama file ke string yang dikodekan UTF8, string inputnya adalah: " + s);
b = byte baru[0];
}
for (int j = 0; j < b.panjang; j++) {
int k = b[j];
jika (k < 0)
k+= 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
kembali sb.toString();
}
/**
* Konversikan karakter Cina pada nama file menjadi string berkode UTF8 sesuai dengan browser yang berbeda, sehingga nama file yang disimpan dapat ditampilkan dengan benar saat mengunduh.
*
* @param s
*Nama file asli
* @mengembalikan nama file yang disandikan ulang
*/
String statis publik toUtf8String(permintaan HttpServletRequest, String s) {
Agen string = request.getHeader("Agen-Pengguna");
mencoba {
boolean isFireFox = (agen != null && agent.toLowerCase().indexOf("firefox") != -1);
jika (isFireFox) {
s = String baru(s.getBytes("UTF-8"), "ISO8859-1");
} kalau tidak {
s = StringUtil.toUtf8String(s);
if ((agen != null && agen.indexOf("MSIE") != -1)) {
// lihat http://support.microsoft.com/default.aspx?kbid=816868
if (s.panjang() > 150) {
// Dapatkan kemungkinan pengkodean berdasarkan lokal permintaan
s = String baru(s.getBytes("UTF-8"), "ISO8859-1");
}
}
}
} tangkapan (Tidak DidukungEncodingException e) {
e.printStackTrace();
}
kembali;
}