我有一个由JSF生成的HTML表单,它将输入元素映射到bean setter 并且在我看来,JSF在路上输入unicode输入。特别是我在setter中将以下异常用于测试目的
public void setTitle(String title){
System.out.println("title set with: "+title+"\n");
if (title.startsWith("xxx")) {
throw new RuntimeException("debug exception "+title);
}
this.title = title;
}
然后我将以下文本放入表单标题输入元素:“xxxx海陆”。然后,当我提交表单时,我会看到日志打印
title set with: xxxx ?????
(在兼容unicode的mac终端上)。 我在响应HTML页面上收到错误消息:
Error setting property 'title' in bean of type
uk.ac.lancs.e_science.sakaiproject.api.blogger.post.Post:
java.lang.RuntimeException: debug exception xxxx ���??
任何有关错误的线索?我只是满满的并且诊断错误了吗? 我想我已经淘汰了所有其他可能性。 Unicode似乎在同一应用程序的其他组件中工作正常。
答案 0 :(得分:3)
我会问的问题:
由于您在控制台上看到的内容不一定是字符串中的内容,您可以使用以下代码转储Unicode code points:
public static void printCodepoints(char[] s) {
for (int i = 0; i < s.length; i++) {
int codePoint = Character.isHighSurrogate(s[i]) ? Character
.toCodePoint(s[i], s[++i])
: s[i];
System.out.println(Integer.toHexString(codePoint));
}
}
答案 1 :(得分:0)
浏览器无法通过线路发送unicode;它必须以某种方式编码unicode。从异常的输出(两个汉字成为五个字符),我猜测数据被编码为UTF-8,并且在组件的服务器端接收后,字符串title
未被正确解码。 / p>
我建议为表单设置accept-charset
属性。这应该告诉每个人的行为。