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

如何判断数字编码实体是否为有效的ISO8859-1编码?

判断HTML十进制字符引用有效性的Kotlin实现

你提到的〹属于HTML十进制字符引用,判断其是否为有效编码可按以下方案实现,无需引入额外依赖,直接使用Kotlin标准库内置的字符集处理API即可:

核心实现逻辑

  • 第一步:通过正则匹配提取字符引用中的十进制码点数值,排除格式不符合的输入
  • 第二步:校验码点是否在Unicode合法范围(0 ~ 0x10FFFF),超出范围直接判定为无效
  • 第三步:将码点转换为字符后,用目标字符集做编码+解码的一致性校验,排除当前字符集不支持的码点

完整可运行代码

import java.nio.charset.Charset
import java.nio.charset.CodingErrorAction

/**
 * 判断HTML十进制字符引用是否为指定字符集的有效编码
 * @param htmlEntity 格式为&#数字;的字符引用,示例:〹
 * @param charset 目标校验字符集,默认使用UTF-8
 * @return 有效返回true,无效返回false
 */
fun isValidHtmlEntity(htmlEntity: String, charset: Charset = Charsets.UTF_8): Boolean {
    // 匹配HTML十进制字符引用格式,提取码点数字
    val entityRegex = Regex("^&#(\\d+);$")
    val matchResult = entityRegex.matchEntire(htmlEntity) ?: return false

    val codePoint = try {
        matchResult.groupValues[1].toInt()
    } catch (e: NumberFormatException) {
        return false
    }

    // 校验码点是否属于Unicode合法范围
    if (codePoint < 0 || codePoint > 0x10FFFF) return false

    val originalStr = String(Character.toChars(codePoint))

    // 配置编码/解码器,遇到错误直接抛出异常
    val encoder = charset.newEncoder()
        .onMalformedInput(CodingErrorAction.REPORT)
        .onUnmappableCharacter(CodingErrorAction.REPORT)
    val decoder = charset.newDecoder()
        .onMalformedInput(CodingErrorAction.REPORT)
        .onUnmappableCharacter(CodingErrorAction.REPORT)

    return try {
        // 编码后再解码,和原字符串对比确认一致
        val decodedStr = decoder.decode(encoder.encode(originalStr)).toString()
        originalStr == decodedStr
    } catch (e: Exception) {
        false
    }
}

// 测试用例
fun main() {
    println(isValidHtmlEntity("&#12345;")) // 输出true,对应合法UTF-8字符〹
    println(isValidHtmlEntity("&#1114112;")) // 输出false,超出Unicode最大码点限制
    println(isValidHtmlEntity("&#200;", Charset.forName("US-ASCII"))) // 输出false,ASCII仅支持0-127的码点
}

扩展说明

如果需要校验十六进制格式的字符引用(如&#x1234;),只需要修改正则匹配规则为^&#x([0-9a-fA-F]+);$,再将提取的字符串按十六进制转Int即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:45:07