gpt4 book ai didi

java - JSF 和 HTML 表单的 Unicode 问题?

转载 作者:可可西里 更新时间:2023-11-01 13:18:22 25 4
gpt4 key购买 nike

我有一个由 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 似乎在同一应用程序的其他组件中工作良好。

最佳答案

我会问的问题:

  • 表单如何对请求进行编码(application/x-www-form-urlencoded 或 multipart/form-data)?多部分数据将使用第 3 方 MIME 解析器解码,因此存在问题。如果数据是 url 编码的,它是否被正确转义?
  • 浏览器是什么字符集accepting
  • 什么 encoding is the server detecting ?是 Unicode 字符集吗?
  • 是否只是以 lossy encoding 形式写入的日志记录? (例如 MacRoman )?什么default charset服务器在使用吗?

由于您在控制台上看到的不一定是字符串中的内容,因此您可以转储 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));
}
}

关于java - JSF 和 HTML 表单的 Unicode 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/863767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com