java - 使用java在mysql中保存和获取阿拉伯语
问题描述
在将阿拉伯语单词保存到 mysql 表中时,我得到一个以 开头的字符串,每个块都有分号。我使用 jsp 作为前端,在 jsp 中我可以用阿拉伯语显示字符串,但是在将字符串传递到 form:input 时,数据显示为一些不可读的代码。
我在解决这个问题时浪费了很多时间,也许这不是问题,但我怎样才能将它转换成 Java 中的实际阿拉伯语单词?,任何建议都会有所帮助。
解决方案
那是数字 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();
数字实体有两种形式:A
以 10?
为底和以 16 为底。
或者,StringEscapeUtils.unescapeHtml4可能令人满意。
推荐阅读
- python-3.x - 始终在 Ubuntu 中使用 Python virtualenv
- java - 重新启动 EXAM 工具会引发 Eclipse 错误
- reactjs - 如何从状态/道具中获取复选框值?
- node.js - 如何链接 2 个 docker 容器,一个与后端代码,另一个与 react 都在 node.js 上
- mysql - 如何使用 Count 一列并由每个 id 分隔
- java - 在 SPARK 中的两个集群之间同步 HBase 表
- python-3.x - Dash 应用程序未在 gunicorn nginx wsgi 服务器上运行
- java - JDBC 等效于 hibernate.globally_quoted_identifiers
- oracle - 如何在 with 语句中提取值?
- sharepoint - 如果已经存在同名文件,是否有选择如何重命名我的文件的解决方案?