StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
se (c >= 0 && c <= 255) {
sb.append(c);
} outro {
byte[]b;
tentar {
b = Character.toString(c).getBytes("utf-8");
} catch (Exceção ex) {
exceçãoUtil.error("Erro ao converter caracteres chineses no nome do arquivo para string codificada em UTF8, a string de entrada é: " + s);
b = novo byte[0];
}
for (int j = 0; j < b.comprimento; j++) {
int k = b[j];
se (k < 0)
k+= 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
retornar sb.toString();
}
/**
* Converta os caracteres chineses no nome do arquivo em uma string codificada em UTF8 de acordo com diferentes navegadores, para que o nome do arquivo salvo possa ser exibido corretamente durante o download.
*
* @params
*Nome do arquivo original
* @return o nome do arquivo recodificado
*/
public static String toUtf8String (solicitação HttpServletRequest, String s) {
String agente = request.getHeader("User-Agent");
tentar {
boolean isFireFox = (agente! = null && agente.toLowerCase().indexOf("firefox") != -1);
if (éFireFox) {
s = new String(s.getBytes("UTF-8"), "ISO8859-1");
} outro {
s = StringUtil.toUtf8String(s);
if ((agente! = null && agente.indexOf("MSIE")! = -1)) {
// consulte http://support.microsoft.com/default.aspx?kbid=816868
if (s.comprimento() > 150) {
// Obtém a codificação possível com base na localidade da solicitação
s = new String(s.getBytes("UTF-8"), "ISO8859-1");
}
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
retornar;
}