Scala Воспроизвести 2.4.x обработку расширенных символов через anorm (MySQL) в Java Mail

58
6

У меня создалось впечатление, что UTF-8 был ответом на все: 0


Проблема: использование игровой формы обработки воспроизведения для перехода с веб-страницы (базового поля ввода текстовой области HTML) в базу данных MySQL через уровень абстракции Anorm (так что все правильно escaped), а затем чтение базы данных для сбора этих данных и создайте электронное письмо с помощью API JavaMail для отправки HTML-письма с альтернативными символами (например, с такими символами, как например, например. (Я бы опубликовал больше, но я подозреваю, что здесь могут быть и странные артефакты). Я попробую это в комментарии ниже, возможно)


Я могу использовать умеренный набор символов и создавать электронную почту TEXT (отредактированную с помощью Atom и помещенную в поток непосредственно на уровне кода), и она проходит через электронную почту со всеми персонажами, которые я выбрал тактично.


Я еще не систематически работал с символами, которые я просто использовал относительно случайную выборку в качестве начального теста.


Я помещаю один и тот же набор символов в текстовое поле и пытаюсь сохранить их в базе данных, и я могу сохранить только 1 из 5 или менее.


Ошибки выглядят следующим образом:


SQLException: Incorrect string value: '\xC4\x93\x0D\x0A\x0D\x0A...' for column 'content' at row 1


Я подозреваю, что собираюсь узнать тонну новой информации о Play и/или UTF-8 или HTML или какой-либо части цепи, где это происходит с рельсов.


Теперь мой вопрос: есть ли идиоматический пример воспроизведения того, как обрабатывать UTF-8 от конца до конца через Anorm и в Java Mail?


(Я думаю, что я ожидал, что он будет "встроенным", но потом я ожидал, что LOT больше будет запекаться в основной продукт...)


Мне нужен/нужен как TEXT, так и HTML-путь для части электронной почты. (Я могу написать ОБА, и они работают нормально - проблема заключается в перемещении чередующихся символов, хотя каналы, как указано выше).

спросил(а) 2015-07-15T00:27:00+03:00 5 лет, 3 месяца назад
1
Решение
100

Это, кажется, надежный кандидат - я изучаю его сейчас до конца.


import org.apache.commons.lang3._

def htmlEncode(input: String) = htmlEncode_sb(input).toString

def htmlEncode_sb(input: String, stringBuilder: StringBuilder = new StringBuilder()) = {
stringBuilder.synchronized {
for ((c, i) <- input.zipWithIndex) {
if (CharUtils.isAscii(c)) {
// Encode common HTML equivalent characters
stringBuilder.append(StringEscapeUtils.escapeHtml4(c.toString()))
} else {
// Why isn't this done in escapeHtml4()?
stringBuilder.append(s"""${Character.codePointAt(input, i)};""")
}
}
stringBuilder
}
}


Чтобы заставить его работать внутри Play, вам понадобится это в файле build.sbt


  "org.apache.commons" % "commons-lang3" % "3.4",

Это сообщение в блоге привело меня к написанию этого кода: https://objectpartners.com/2013/04/24/html-encoding-utf-8-characters/

Обновление: подтверждено, что он работает от конца до конца.


Ввод веб-страницы в виде TextArea внутри формы, сохраненной в базе данных MySQL, экранированной Anorm, перечитанной из базы данных и отображаемой внутри TextArea на веб-странице с расширенными символами (визуально), отображающимися точно как входные данные.


Вам нужно будет вызвать @Html(htmlContentString) внутри шаблона Twirl, чтобы повторно отобразить это как исходный HTML-код, но браузер (Safari 8.0.7) отображал то, что я дал ему после поездки туда и обратно из базы данных.


Одно предостережение - он создает машиночитаемый HTML-код, не читаемый человеком HTML. Было бы неплохо, если бы он не закодировал угловые скобки и, таким образом, он больше похож на HTML, который мы ожидаем. Я уверен, что блок совпадения шаблонов будет добавлен рядом с исключением того, что:)

ответил(а) 2015-07-15T22:02:00+03:00 5 лет, 3 месяца назад
42
ответил(а) 2015-07-15T18:58:00+03:00 5 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема