Проблема с Юникодом в приложении Struts

#unicode #struts

#Юникод #struts

Вопрос:

У меня есть несколько международных символов для отображения в моем проекте struts. Я сохранил символ в своей базе данных. Поэтому, когда я повторно загружаю его из DB в JSP, он отображает что-то вроде

amp;#2344;amp;#2375;amp;#2346;amp;#2366; Я потратил на ее решение целых 2 дня, посещая разные форумы, но я не смог найти правильное решение. Итак, это моя последняя надежда. Я надеюсь, что кто-нибудь прольет на меня свет.

Если я перейду по ссылке http://www.motobit.com/util/charset-codepage-conversion.asp и добавьте к нему символ iso-8859-1 amp;#2344;amp;#2375;amp;#2346;amp;#2366; и преобразуйте его, он отобразит мой международный символ.

Спасибо

Комментарии:

1. У вас действительно есть html-объекты, хранящиеся в БД?

2. Нет, это то, что хранится в DB ‘amp;#2344;amp;#2375;amp;#2346;amp;#2366;’

Ответ №1:

Нет, это то, что хранится в DB 'amp;#2344;amp;#2375;amp;#2346;amp;#2366;'

Это то, что я имел в виду под html-объектами. Когда вы выводите эту строку с помощью jstl, c:out она снова не будет использовать amp; знаки, чтобы избежать внедрения html и межсайтовых скриптовых атак. Исходный HTML-код отображаемой страницы тогда выглядел бы следующим образом:

 amp;amp;#2344;amp;amp;#2375;amp;amp;#2346;amp;amp;#2366;
  

Это означает, что браузер будет отображать amp; знак буквально.

Веб-страница, на которую вы ссылаетесь, похоже, предлагает неконвертированную строку для загрузки в формате txt, поскольку содержит только символы в диапазоне ascii. Если вы откроете этот файл в браузере, он, вероятно, попытается интерпретировать его как html и показать соответствующие международные символы.

Вам следует выяснить, почему в вашей базе данных уже есть закодированные символы, было бы лучше вместо этого сохранить фактические байты в определенной кодировке, такой как utf-8.

Комментарии:

1. Хорстманн, большое тебе спасибо. Теперь я понимаю, что происходит. Но вместо того, чтобы хранить его как байт, можно ли будет декодировать символ и затем передавать в JSP. Возможно ли это?

2. @JavaGuy: Это возможно, установив для escapeXml of c:out значение false, но я бы не рекомендовал это. Это позволило бы пользователю отображать произвольный html и javascript на ваших страницах, которые могут быть использованы для некоторых вредоносных эффектов.

3. @JavaGuy: Если вам нужна помощь в выяснении, почему эти закодированные символы в первую очередь сохраняются в базе данных, пожалуйста, задайте новый вопрос и включите соответствующие части вашего jsp и action class.

Ответ №2:

Когда вы вставляете данные в базу данных MySQL, используете ли вы NVARCHAR тип для поля, и если да, ставили ли вы N перед таблицей.Имя поля?

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