You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java操作MySQL存取阿拉伯语及form:input转码问题求助

解决HTML实体编码的阿拉伯语在form:input中乱码的问题

你遇到的核心问题是:从数据库取出的阿拉伯语被转成了&#xxxx;格式的HTML实体编码,JSP页面直接渲染时会自动解码这些实体,但Spring的form:input标签不会自动处理,所以导致显示乱码。下面给你几个实用的解决方法:

方法一:用Spring自带工具类(推荐,适配Spring MVC项目)

如果你用的是Spring框架,直接借助HtmlUtils的htmlUnescape方法就能一键解码,非常省心:

import org.springframework.web.util.HtmlUtils;

// 从数据库取出的编码字符串
String encodedArabic = "البعرية";
// 解码为真实阿拉伯语字符
String decodedArabic = HtmlUtils.htmlUnescape(encodedArabic);
// 将解码后的字符串放入Model,传给前端form:input
model.addAttribute("arabicText", decodedArabic);

方法二:用Apache Commons Text工具类

如果项目未依赖Spring Web模块,或者更倾向于使用Apache生态的工具,可以引入commons-text依赖后,用StringEscapeUtils解码:

import org.apache.commons.text.StringEscapeUtils;

String decodedArabic = StringEscapeUtils.unescapeHtml4(encodedArabic);

对应的Maven依赖配置:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.10.0</version>
</dependency>

方法三:手动实现解码(无第三方依赖场景)

如果不想引入任何外部依赖,也可以自己写一个简单的解码逻辑,通过正则匹配实体编码并转换:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public static String unescapeHtmlEntities(String input) {
    // 匹配&#数字;格式的HTML实体编码
    Pattern entityPattern = Pattern.compile("&#(\\d+);");
    Matcher matcher = entityPattern.matcher(input);
    StringBuffer result = new StringBuffer();
    
    while (matcher.find()) {
        // 将实体中的数字转换为对应的字符
        int charCode = Integer.parseInt(matcher.group(1));
        matcher.appendReplacement(result, Character.toString((char) charCode));
    }
    matcher.appendTail(result);
    return result.toString();
}

// 使用示例
String decodedArabic = unescapeHtmlEntities(encodedArabic);

额外注意事项

为了避免后续再出现类似编码问题,建议检查以下配置:

  • 确保MySQL表的字符集设置为utf8mb4,能完整存储阿拉伯语等非英语字符
  • JDBC连接URL中添加useUnicode=true&characterEncoding=utf8mb4,保证数据库交互时的编码一致性

内容的提问来源于stack exchange,提问作者Jishnu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:39:51