使用Volley获取OpenTDB API JSON数据时出现转义字符异常问题
解决OpenTDB API返回HTML转义字符显示异常的问题
嘿,这个坑我之前踩过!OpenTDB返回的JSON数据里的文本是经过HTML实体转义的(比如把双引号转成"、和号转成&),而Volley的JSONObject.getString()只会原封不动返回这些字符串,不会自动解码。至于JSON查看器里看不到这些异常字符,是因为大多数工具会自动帮你处理HTML实体转义,所以看起来正常。
要解决这个问题,你只需要用Android自带的Html.fromHtml()方法来解码这些转义字符就行,下面是修改后的代码示例:
// 解析结果数组(优化你的代码,直接用getJSONArray更高效) JSONArray array_1 = response.getJSONArray("results"); JSONObject obj_1 = array_1.getJSONObject(0); // 处理问题文本 String rawQuestion = obj_1.getString("question"); String decodedQuestion = Html.fromHtml(rawQuestion, Html.FROM_HTML_MODE_LEGACY).toString(); questionText.setText(decodedQuestion); // 处理正确答案 String rawCorrectAnswer = obj_1.getString("correct_answer"); correctOption = Html.fromHtml(rawCorrectAnswer, Html.FROM_HTML_MODE_LEGACY).toString(); // 处理错误选项数组(同样优化,直接获取JSONArray) JSONArray array_2 = obj_1.getJSONArray("incorrect_answers"); List<String> decodedIncorrectAnswers = new ArrayList<>(); for (int i = 0; i < array_2.length(); i++) { String rawAnswer = array_2.getString(i); decodedIncorrectAnswers.add(Html.fromHtml(rawAnswer, Html.FROM_HTML_MODE_LEGACY).toString()); }
注意事项:
- 如果你需要兼容Android N(API 24)以下的版本,可以直接用
Html.fromHtml(rawQuestion),不过Html.FROM_HTML_MODE_LEGACY是更推荐的写法,能保证在高版本系统上行为一致。 - 不仅是
question字段,correct_answer和incorrect_answers里的内容也可能包含转义字符,所以都需要解码,避免其他地方也出现奇怪的显示问题。
内容的提问来源于stack exchange,提问作者Aman Chatterjee
相关产品推荐
相关产品推荐

