如何处理JSON响应中的HTML编码并将Message渲染到TextView?
处理JSON中的HTML编码内容并渲染到TextView
我来帮你一步步搞定这个问题!你的JSON响应里的Message字段是双重HTML编码的(比如&lt;其实是<经过两次转义的结果),得先解码还原成原始HTML,再渲染到TextView里。
步骤1:解码HTML实体
因为Message是双重转义的,所以要解码两次才能拿到可渲染的原始HTML:
- 第一次解码:把
&这类外层转义字符还原成&,比如&lt;会变成< - 第二次解码:把
<这类标准HTML实体还原成<等原始符号
实现方式(两种可选)
方式一:用Android原生API
Android自带的Html类能处理HTML实体解码,调用两次方法即可:
import android.text.Html; import androidx.core.text.HtmlCompat; // 从JSON中取出的编码后的Message字符串 String encodedMessage = noteObj.getString("Message"); // 第一次解码:处理外层转义 String firstDecode = Html.fromHtml(encodedMessage).toString(); // 第二次解码:还原成原始HTML String decodedHtml = HtmlCompat.fromHtml(firstDecode, HtmlCompat.FROM_HTML_MODE_LEGACY).toString();
方式二:用Apache Commons Text库
如果想要更稳定的解码效果,可以引入这个第三方库:
- 先在
build.gradle中添加依赖:
implementation 'org.apache.commons:commons-text:1.10.0'
- 解码代码:
import org.apache.commons.text.StringEscapeUtils; String encodedMessage = noteObj.getString("Message"); // 两次unescapeHtml4直接处理双重转义 String decodedHtml = StringEscapeUtils.unescapeHtml4(StringEscapeUtils.unescapeHtml4(encodedMessage));
步骤2:把解码后的HTML渲染到TextView
用HtmlCompat.fromHtml()把HTML字符串转换成Spanned对象,再设置给TextView:
TextView caseNoteTextView = findViewById(R.id.your_textview_id); // FROM_HTML_MODE_COMPACT是推荐模式,兼容大部分常用HTML标签 caseNoteTextView.setText(HtmlCompat.fromHtml(decodedHtml, HtmlCompat.FROM_HTML_MODE_COMPACT));
小提醒
TextView对HTML标签的支持有限,像你示例里的<table>能正常渲染,但复杂样式(比如自定义CSS)可能显示异常。如果要完美展示复杂HTML,建议改用WebView替代TextView。
内容的提问来源于stack exchange,提问作者ZA BroadPeak
相关产品推荐
相关产品推荐

