Как кодировать специальные символы для POST с помощью Spring / Roo - PullRequest
3 голосов
/ 09 апреля 2010

Я использую Spring / Roo для сервера приложений, и мне нужно иметь возможность добавлять некоторые специальные символы. В частности, такие символы, как символ иены или евро. Когда я получаю эти символы на моем сервере и отображаю их в консоли, они отображаются как «?». Как их можно правильно закодировать и получить?

Ответы [ 2 ]

6 голосов
/ 22 декабря 2011

Попробуйте настроить src/main/resources/META-INF/spring/database.properties на это:

database.url=jdbc:mysql://[YOUR_DB_SERVER]:3306/[YOUR_DB_NAME]?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
3 голосов
/ 10 апреля 2010

Здесь есть несколько возможных точек отказа.

Сначала я бы проверил, поддерживает ли консоль указанные символы:

  • если кодировка по умолчанию, используемая JVM, не поддерживает символы, они будут превращены в вопросительные знаки на System.out
  • если шрифт консоли не поддерживает символы, они не будут отображаться правильно
  • если консоль декодирует байты, используя кодировку, отличную от той, к которой System.out кодирует их, символы не будут отображаться правильно

Вместо того, чтобы пытаться печатать символы как литералы, приведите к int и напечатайте шестнадцатеричное значение - затем сравните значение с диаграммами Юникода .

Между браузером и сервером также может происходить потеря или неправильное преобразование. В идеале сервер должен использовать UTF-8 для кодирования и декодирования. Если кодировка, используемая браузером при кодировании данных, не поддерживает символы, они будут кодироваться с потерями; браузер обычно выбирает кодировку на основе кодировки, отправленной сервером для запроса GET (или реже из атрибута формы ). Проверьте заголовок Accept-Charset , отправляемый с вашими данными (это можно сделать с помощью чего-то вроде Firebug или Fiddler ). Я ничего не знаю о Ру, но обязательно должен быть какой-то механизм для настройки кодировок.

...