StringBuffer sb = новый StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
если (c >= 0 && c <= 255) {
sb.append(с);
} еще {
байт [] б;
пытаться {
b = Character.toString(c).getBytes("utf-8");
} catch (исключение ex) {
ExceptionUtil.error("Ошибка при преобразовании китайских символов в имени файла в строку в кодировке UTF8, входная строка: " + s);
б = новый байт[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
если (к <0)
к += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
вернуть sb.toString();
}
/**
* Преобразуйте китайские символы в имени файла в строку в кодировке UTF8 в соответствии с различными браузерами, чтобы сохраненное имя файла могло отображаться правильно при загрузке.
*
* @парам с
*Оригинальное имя файла
* @return перекодированное имя файла
*/
public static String toUtf8String (запрос HttpServletRequest, String s) {
Строковый агент = request.getHeader("Пользователь-Агент");
пытаться {
логическое значение isFireFox = (agent != null && Agent.toLowerCase().indexOf("firefox") != -1);
если (isFireFox) {
s = новая строка(s.getBytes("UTF-8"), "ISO8859-1");
} еще {
s = StringUtil.toUtf8String(s);
if ((агент != null && Agent.indexOf("MSIE") != -1)) {
// см. http://support.microsoft.com/default.aspx?kbid=816868.
если (s.length() > 150) {
// Получаем возможную кодировку на основе локали запроса
s = новая строка(s.getBytes("UTF-8"), "ISO8859-1");
}
}
}
} catch (UnsupportedEncodingException e) {
е.printStackTrace();
}
вернуть с;
}