#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
ofc:out
значение false, но я бы не рекомендовал это. Это позволило бы пользователю отображать произвольный html и javascript на ваших страницах, которые могут быть использованы для некоторых вредоносных эффектов.3. @JavaGuy: Если вам нужна помощь в выяснении, почему эти закодированные символы в первую очередь сохраняются в базе данных, пожалуйста, задайте новый вопрос и включите соответствующие части вашего jsp и action class.
Ответ №2:
Когда вы вставляете данные в базу данных MySQL, используете ли вы NVARCHAR
тип для поля, и если да, ставили ли вы N
перед таблицей.Имя поля?
Вы должны поместить его в базу данных способом Юникода, который доступен с вводом N
перед именем поля