StringBuffer sb = nuevo StringBuffer();
para (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
si (c >= 0 && c <= 255) {
sb.append(c);
} demás {
byte[] b;
intentar {
b = Carácter.toString(c).getBytes("utf-8");
} captura (Excepción ex) {
excepciónUtil.error("Error al convertir caracteres chinos en el nombre del archivo a una cadena codificada en UTF8, la cadena de entrada es: " + s);
b = nuevo byte[0];
}
para (int j = 0; j < b.length; j++) {
intk = b[j];
si (k < 0)
k+= 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
devolver sb.toString();
}
/**
* Convierta los caracteres chinos en el nombre del archivo a una cadena codificada en UTF8 según los diferentes navegadores, para que el nombre del archivo guardado se pueda mostrar correctamente al descargar.
*
* @param s
*Nombre del archivo original
* @return el nombre del archivo recodificado
*/
cadena estática pública toUtf8String (solicitud HttpServletRequest, cadena s) {
Agente de cadena = request.getHeader ("Agente de usuario");
intentar {
booleano isFireFox = (agente! = nulo && agente.toLowerCase().indexOf("firefox")! = -1);
si (esFireFox) {
s = nueva cadena(s.getBytes("UTF-8"), "ISO8859-1");
} demás {
s = StringUtil.toUtf8String(s);
if ((agente!= nulo && agente.indexOf("MSIE")!= -1)) {
// ver http://support.microsoft.com/default.aspx?kbid=816868
si (s.longitud() > 150) {
// Obtiene la posible codificación según la configuración regional de la solicitud
s = nueva cadena(s.getBytes("UTF-8"), "ISO8859-1");
}
}
}
} captura (UnsupportedEncodingException e) {
e.printStackTrace();
}
devolver s;
}