Веб-проект Java EE и кодировка символов - PullRequest
0 голосов
/ 27 января 2011

мы создали веб-проект java ee и используем jdbc для хранения наших данных. Проблема в том, что немецкий Umlaute, такой как äöü, используется и правильно хранится в базе данных mysql. Мы не знаем почему, но в браузере эти символы не работают, отображая странные вещи вроде

ö�

вместо этого. Я уже пытался установить кодировку соединения jdbc, как описано в этом вопросе:

Кодировка символов JDBC

И кодировка html-страницы установлена ​​правильно:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Есть идеи, как это исправить?


Обновление

connection.prepareStatement("SET CHARACTER SET utf8").execute();

не заставит умлаутов работать. изменив метатег на

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

тоже ничего не изменит

1 Ответ

1 голос
/ 27 января 2011

«Мы не знаем почему, но в браузере эти символы разбиты»

Ну, это первое, что нужно выяснить.Вы должны отслеживать свои данные на каждом этапе:

  • Когда вы извлекаете их из базы данных (с ведением журнала)
  • Когда вы вводите их на страницу (с ведением журнала)
  • На проводе (через Wireshark )

Когда вы регистрируетесь, не просто записывайте в журнал строки: регистрируйте символы Unicode, которые составляют строки, как целые числа.Просто приведите каждый символ в строке к целому числу и зарегистрируйте его.Это примитивно, но оно скажет вам, что вам нужно знать.

Когда вы посмотрите на провод, конечно, вы увидите байт , а не символы как таковые.Вы должны выяснить, какие байты вы ожидаете для выбранной вами кодировки, и сравнить их с тем, что действительно происходит в сети.

Вы указали кодировку в HTML - но сказали ли вы, что генерирует вашу страницу, что выхотите это в ISO Latin 1?Вероятно, это будет причиной как установки заголовка типа содержимого , так и , выполняющего фактическое преобразование текста в байты.

Кроме того, есть ли причина, по которой вы используете вместо этого ISO Latin 1из UTF-8?Почему вы сознательно ограничиваете себя таким образом?(Латинская ISO 1 может обрабатывать только первые 256 символов Unicode вместо полного диапазона символов Unicode. UTF-8 может обрабатывать все, и столь же эффективен для ASCII.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...