代码之家  ›  专栏  ›  技术社区  ›  Aaron Watters

JSF和HTML表单的Unicode问题?

  •  3
  • Aaron Watters  · 技术社区  · 15 年前

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   McDowell rahul gupta    15 年前

    我要问的问题是:

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

    浏览器不能通过网络发送Unicode;它必须以某种方式对Unicode进行编码。从异常的输出(两个汉字变成了五个字符),我猜数据是以utf-8和字符串编码的。 title 在组件的服务器端接收后未正确解码。

    我建议设置 accept-charset 窗体的属性。这应该告诉每个人都要表现。