когда я отправляю символ Ö со страницы, бэкэнд получает Ã. Веб-страница является частью приложения Spring Webflow / JSF1.2 / Facelets. Когда я проверяю POST с помощью firebug, я вижу:
Content-Type: application/x-www-form-urlencoded
Content-Length: 74
rapport=krediet_aanvragen&fw1=0&fw2=%C3%96ZTEKIN&fw3=0&fw4=0&zoeken=Zoeken
Символ Ö кодируется как% C3% 96, используя эту таблицу . Я вижу, что это правильное шестнадцатеричное представление символа UTF-8 / Unicode Ö.
Однако, когда он достигает бэкэнда, персонаж меняется на Ã. Используя ту же таблицу, я вижу, что где-то есть код, который пытается интерпретировать C3 и 96 по отдельности (или в формате unicode \ u). U + 00C3 оказывается М, 96 не видимый символ, что объясняет это.
Теперь я знаю, что это типичный случай несоответствия кодировки, я просто не знаю, где искать, чтобы это исправить.
Веб-страница содержит
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
При отладке я вижу библиотеку, ответственную за неправильную интерпретацию, - jboss-el 2.0.0.GA, которая кажется правильной, потому что значение разбирается в серверной части в выражении веб-потока:
<evaluate expression="rapportCriteria.addParameter('fw2', flowScope.fw2)" />
Он помещается в flowScope с помощью:
<evaluate expression="requestParameters.fw2" result="flowScope.fw2"/>
Не обращайте внимания на извилистый способ получения ввода формы в бэкэнд, это код, который пытается интегрировать Webflow с отчетами BIRT ... но у меня такой же симптом в других веб-приложениях.
Есть идеи, с чего мне начать искать?