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

如何将Java UTF-8编码转换为HTML编码?有无相关Java工具类/库?

Java中UTF-8字符转HTML编码的实现方案

嘿,这个问题我太熟了!经常在项目里遇到字符编码转换的需求,来给你详细讲讲怎么实现~

核心逻辑先搞懂

首先得明确:你说的“UTF-8字符编码转HTML编码”,本质是把Unicode字符(Java里的char/String本身就是Unicode编码)转换成HTML实体格式——也就是用&#十进制数值;或者&#x十六进制数值;的形式表示特殊字符,比如你提到的\u001A(对应十进制26的SUB控制字符),转成HTML就是。

现成工具类直接用,不用自己造轮子

Java生态里有很多成熟的库可以搞定这个,推荐几个常用的:

1. Apache Commons Text(最通用的选择)

Apache的这个工具库几乎是Java开发的标配,里面的StringEscapeUtils类专门处理各种编码转换,包括HTML实体。

用法示例:

import org.apache.commons.text.StringEscapeUtils;

public class HtmlEncodeDemo {
    public static void main(String[] args) {
        // 对应\u001A的字符
        char subChar = '\u001A';
        String htmlEncoded = StringEscapeUtils.escapeHtml4(String.valueOf(subChar));
        System.out.println(htmlEncoded); // 输出:
    }
}

这个方法会自动识别所有需要转义的字符(控制字符、非ASCII字符、HTML特殊字符如<>"等),转换成标准的HTML实体,省心又靠谱。

2. Spring框架自带的HtmlUtils

如果你的项目已经用了Spring,那直接用框架自带的工具类就行,不用额外加依赖。HtmlUtils.htmlEscapeDecimal()方法专门生成十进制格式的HTML实体,刚好匹配你的需求:

import org.springframework.web.util.HtmlUtils;

public class SpringHtmlEncodeDemo {
    public static void main(String[] args) {
        char subChar = '\u001A';
        String htmlEncoded = HtmlUtils.htmlEscapeDecimal(String.valueOf(subChar));
        System.out.println(htmlEncoded); // 输出:&#26;
    }
}

另外还有htmlEscape()方法,会根据字符类型选择预定义实体(比如<转&lt;)或十六进制实体,按需选择就行。

3. 手动实现(无依赖场景)

如果不想引入第三方库,自己写个简易版也不难,核心就是获取字符的Unicode十进制值,拼接成HTML实体格式:

public class ManualHtmlEncoder {
    public static String encodeToHtmlDecimal(String input) {
        StringBuilder sb = new StringBuilder();
        for (char c : input.toCharArray()) {
            // 只转义ASCII控制字符(<32)和非ASCII字符(>126)
            if (c < 32 || c > 126) {
                sb.append("&#").append((int) c).append(";");
            } else {
                // 可打印ASCII字符直接保留,比如字母、数字、普通符号
                sb.append(c);
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        char subChar = '\u001A';
        System.out.println(encodeToHtmlDecimal(String.valueOf(subChar))); // 输出:&#26;
    }
}

注意:手动实现的话,如果需要处理HTML预定义实体(比如<转&lt;),还要额外加判断逻辑,比如遇到<就替换成&lt;,不然直接输出可能会破坏HTML结构。

针对你例子的验证

你提到的\u001A是Unicode控制字符,十进制数值为26,所以不管用上面哪种方法,最终都会转换成&#26;,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:59:03