如何将pokémon转换为pokémon?HTML实体解码求助
解决HTML实体转普通字符的问题
你遇到的是HTML字符实体解码的问题,é是é的十进制HTML实体,和页面编码、Unicode规范化工具(比如Normalizer)无关,下面分场景给你可行的解决方法:
前端JavaScript处理
直接利用浏览器的DOM解析能力来解码最稳妥,不用自己写正则处理各种实体:
// 方法1:用textarea元素解析 function decodeHtml(str) { const textArea = document.createElement('textarea'); textArea.innerHTML = str; return textArea.value; } // 调用示例 const encoded = 'pokémon'; const decoded = decodeHtml(encoded); console.log(decoded); // 输出 pokémon
或者用DOMParser:
const encoded = 'pokémon'; const doc = new DOMParser().parseFromString(`<span>${encoded}</span>`, 'text/html'); const decoded = doc.querySelector('span').textContent;
后端Java处理(你提到了Normalizer,推测用Java)
Normalizer不负责HTML实体解码,得用专门的工具:
方案1:Apache Commons Text库(推荐)
引入依赖后直接调用工具类:
import org.apache.commons.text.StringEscapeUtils; public class EntityDecodeDemo { public static void main(String[] args) { String encodedStr = "pokémon"; String decodedStr = StringEscapeUtils.unescapeHtml4(encodedStr); System.out.println(decodedStr); // 输出 pokémon } }
方案2:用Java内置类(无需第三方库)
借助HTMLEditorKit来解析:
import javax.swing.text.html.HTMLEditorKit; import java.io.StringReader; import java.io.StringWriter; public class BuiltInDecoder { public static String decodeHtml(String encoded) throws Exception { StringWriter writer = new StringWriter(); new HTMLEditorKit().read(new StringReader(encoded), new javax.swing.text.DefaultStyledDocument(), 0); return writer.toString(); } public static void main(String[] args) throws Exception { System.out.println(decodeHtml("pokémon")); // 输出 pokémon } }
为什么之前的方法无效?
- 页面meta设置UTF-8是指定页面的字符编码,而你遇到的是HTML实体转义问题,不是编码不匹配,所以meta解决不了。
- Normalizer是用来处理Unicode字符的规范化(比如合并组合字符),和HTML实体解码完全是两码事,所以用它没用。
内容的提问来源于stack exchange,提问作者Barış Babahan
相关产品推荐
相关产品推荐

