首页 > 解决方案 > 使用java在mysql中保存和获取阿拉伯语

问题描述

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

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

标签: javaspringjspspring-mvcutf-8

解决方案


那是数字 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可能令人满意。


推荐阅读