Особые символы несоответствия - PullRequest
1 голос
/ 25 апреля 2010

Здравствуйте. Я создаю веб-приложение Spring MVC, которое работает на Tomcat 6.0.20 и JDK 1.6.0_19. Когда я отправляю некоторые специальные символы через форму HTML, некоторые из них сохраняются в виде вопросительных знаков?

Например, эти символы хранятся правильно: €, á, é, í, ‰ и т. Д. Но некоторые символы заменены на? как: ₤, ♪, ☺

Таблица кодов таблиц MySQL - utf-8. Мой JSP также использовать UTF-8

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

Я включил org.springframework.web.filter.CharacterEncodingFilter в web.xml, как предложено здесь

Когда я отлаживаю запрос POST при отправке 3 символов € a ₤ с помощью firebug, я получаю:% E2% 82% ACa% E2% 82% A4, что правильно, поскольку E2 82 AC - это код €, а E2 82 A4 код для ₤ но stored хранится как? в базе данных. Когда я сохраняю ₤ непосредственно в базе данных, он корректно отображается на веб-странице.

Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2010

Сначала выведите эти символы на стандартный вывод UTF-8. Если они выглядят неправильно, вам нужно установить кодировку HTTP-запроса. Если они выглядят правильно, то проблема действительно в уровне доступа к данным. Используйте независимый инструмент управления БД, чтобы вручную вставить и просмотреть эти символы. Если они выглядят неправильно, вам нужно установить кодировку БД (и таблицы!). Если они выглядят правильно, то проблема в драйвере / строке соединения JDBC. Также проверьте, совпадает ли версия драйвера JDBC с БД и является ли она последней доступной.

Более подробную информацию, практическое объяснение и подробные решения вы найдете в этой статье .

2 голосов
/ 25 апреля 2010

Существует несколько областей, в которых необходимо проверить правильность кодировки символов, поскольку некоторые по умолчанию используют UTF-8, а другие нет (например, iso-8859-1). Проверка:

  • Драйвер JDBC
  • Виртуальная машина Java (может анализировать только латиницу и юникод - может запускать native2ascii для преобразования нелатинских символов в юникод)
  • Кодировка базы данных
  • Tomcat / JBoss и т. Д. (Сервер)
  • браузер
  • операционная система

Это боль в шее, когда приходится проверять все эти вещи, но кто-то должен это делать. Я рекомендую установить все на UTF-8, так как это обычно то, с чем люди согласны

Мне кажется, что источником проблемы может быть JVM или ваш драйвер JDBC

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