2

我正在从 JSP 页面上的文本输入字段中获取输入,该字段可能包含变音符号。(例如 Ä,Ö,Ü,ä,ö,ü,ß)。

处理输入适用于非元音变音。但是,每当在输入字段中输入元音变音时,就会传递一个不正确的值。

例如:

  • 如果在输入字段中输入了“ä”(UTF-8:U+00E4) ,
  • 从参数中提取的字符串是“ä”(UTF-8:U+00C3 和 U+00A4)

在我看来,UTF-8 十六进制编码(对于“ä”是 c3 a4)被用于转换。

如何检索正确的值?


以下是当前实现的片段:

JSP 页面将输入值“pk”传递给处理逻辑:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
<input type="text" name="<%=pk.toString()%>" value="<%=value%>" size="70"/>
<button type="submit" title="Edit" value='Save' onclick="action.value='doSave';pk.value='<%=pk.toString()%>'"><img src="icons/run.png"/>Save</button>

该值从 args 中检索并转换为字符串:

UUID pk = UUID.fromString(args.get("pk")); //$NON-NLS-1$
String value = args.get(pk.toString());

注意:保存在数据库中的变音符号会正确显示在页面上。

4

1 回答 1

5

注意:保存在数据库中的变音符号会正确显示在页面上。

由于这个事实,我假设您已经通过<%@page pageEncoding="UTF-8"%>in JSP 或<jsp-config>in正确地将响应编码设置为 UTF-8 web.xml

留下请求编码。如果您使用 GET 或 POST,您的问题和代码都不清楚。如果您使用 POST,那么您需要创建一个显式设置 HTTP 请求正文编码的servlet 过滤器:

request.setCharacterEncoding("UTF-8");

或者,如果您使用 GET,那么您需要深入了解服务器配置以将 URI/参数编码设置为 UTF-8。如何做到这一点取决于所使用的服务器,从问题中也不清楚,更不用说从您的问题历史记录中了。因此,我将仅举一个 Tomcat 的示例:在 Tomcat 中设置元素的URIEncoding属性:<Connector>/conf/server.xml

<Connector ... URIEncoding="UTF-8">

也可以看看:

于 2012-11-08T11:17:48.207 回答