使用java在mysql中保存和获取阿拉伯语

时间:2018-05-03 09:50:49

标签: java spring jsp spring-mvc utf-8

在将一个阿拉伯语单词保存到mysql表中时,我得到一个以&#开头的字符串,每个块都有分号。我使用jsp作为前端,在jsp中我可以在阿拉伯语中显示字符串,但在将字符串传递给表单时:输入 数据显示为一些不可读的代码。

我在修复这个问题时浪费了很多时间,也许这不是问题,但我怎样才能将它转换为Java中的实际阿拉伯语?,任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

这是数字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();

数字实体有两种形式:基数为10的&#65;,基数为16的&#x3F;

或许StringEscapeUtils.unescapeHtml4可能令人满意。