在将一个阿拉伯语单词保存到mysql表中时,我得到一个以&#开头的字符串,每个块都有分号。我使用jsp作为前端,在jsp中我可以在阿拉伯语中显示字符串,但在将字符串传递给表单时:输入 数据显示为一些不可读的代码。
我在修复这个问题时浪费了很多时间,也许这不是问题,但我怎样才能将它转换为Java中的实际阿拉伯语?,任何建议都会有所帮助。
答案 0 :(得分:1)
这是数字HTML实体。
可能数据来自HTML表单。浏览器将文本输入作为数字实体发送,因为表单未指示服务器接受该编码。假设UTF-8:
最好的HTML应该采用正确的编码 - 只是为了衡量标准。
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
表单应该告诉服务器接受编码,不需要数字实体。
<form action="/action_page.php" accept-charset="UTF-8">
修理:
String s = ...
Pattern pattern = Pattern.compile("(?i)\\&#((x[A-F0-9]+)|\\d+);");
Matcher m = pattern.matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String code = m.group(1);
if (code.startsWith("x") || code.startsWith("X")) {
code = "0" + code;
}
int codePoint = Integer.decode(code);
m.appendReplacement(sb, "");
sb.appendCodePoint(codePoint);
}
m.appendTail(sb);
s = sb.toString();
数字实体有两种形式:基数为10的A
,基数为16的?
。
或许StringEscapeUtils.unescapeHtml4可能令人满意。