У меня проблема с кодировкой кодировки в моем веб-приложении (JSF 1.2, Spring и Tomcat 7), и у меня закончились идеи о том, что нужно проверить, чтобы увидеть, где происходит ошибка.
Когда я отправляю что-то вроде 'çã', я получаю 'çà £': это означает, что мои данные, помеченные как UTF-8 , преобразуются в ISO-8859-1 где-то в жизненном цикле JSF.
Я знаю, что неправильное преобразование является UTF-8 в ISO-8859-1, потому что это тот же вывод для:
System.out.println(new String("çã".getBytes("UTF-8"), "ISO-8859-1"));
Я считаю, что неправильное преобразование где-то в жизни JSFцикл (это может быть раньше?), потому что я установил валидатор в моем МБ:
public void debugValidator(FacesContext context, UIComponent component,
Object object) throws ValidationException {
System.out.println("debug validator:");
System.out.println(object);
System.out.println("\n");
throw new ValidationException("DEBUG: " + object.toString());
}
, и его сообщение возвращается как: "DEBUG: çà £"
- Во всех моих .xhtml-страницах первая строка имеет вид
<?xml version="1.0" encoding="UTF-8"?>
. - . Я использую Facelets, которая в соответствии с статьей BalusC по умолчанию использует UTF-8
- Так что в этом нет необходимости, но я все равно настроил
CharacterEncodingFilter
Spring в моем web.xml , чтобы установить кодировку символа запроса в UTF-8. - Я положил
URIEncoding="UTF-8"
в файл Tomcat server.xml
, просто чтобы гарантировать - Это не ошибка моего браузера, он печатает то же самое в консоли, и все мое окружение UTF-8.
У вас есть идеи, что еще я могу проверить?В чем может быть мое неправильное предположение?
Заранее спасибо!