сохранение и получение арабского языка в MySQL с использованием Java - PullRequest
0 голосов
/ 03 мая 2018

Сохраняя арабское слово в таблицу mysql, я получаю строку, начинающуюся с & #, и каждый блок имеет точку с запятой. я использую jsp в качестве внешнего интерфейса, в jsp я могу отобразить строку на арабском языке, но при передаче строки в форму: input данные отображаются в виде нечитаемого кода.

Я потратил много времени на исправление этой проблемы, возможно, это не проблема, но как я могу преобразовать это в арабское слово на Java? Любое предложение будет полезно.

1 Ответ

0 голосов
/ 03 мая 2018

Это числовые объекты HTML.

Вероятно, данные взяты из формы HTML. Браузер отправлял текстовые вводы как числовые объекты, так как форма не указывала, что сервер принимает эту кодировку. Предполагая UTF-8:

Лучший HTML должен быть в правильной кодировке - просто для хорошей меры.

<!DOCTYPE html>
<html>
   <meta charset="UTF-8">

Форма должна указывать, что сервер принимает кодировку, не нуждаясь в числовых объектах.

<form action="/action_page.php" accept-charset="UTF-8">

Ремонт:

String s = ...
Pattern pattern = Pattern.compile("(?i)\\&#((x[A-F0-9]+)|\\d+);");
Matcher m = pattern.matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find()) {
    String code = m.group(1);
    if (code.startsWith("x") || code.startsWith("X")) {
        code = "0" + code;
    }
    int codePoint = Integer.decode(code);
    m.appendReplacement(sb, "");
    sb.appendCodePoint(codePoint);
}
m.appendTail(sb);
s = sb.toString();

Числовые объекты представлены в двух формах: &#65; в базе 10 и &#x3F; в базе 16.

В качестве альтернативы возможно StringEscapeUtils.unescapeHtml4 работает удовлетворительно.

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