Utf 8 返回带问号的中文Orbeon表单

Utf 8 返回带问号的中文Orbeon表单,utf-8,character-encoding,tomcat7,hybris,orbeon,Utf 8,Character Encoding,Tomcat7,Hybris,Orbeon,我正在Tomcat 7.0上使用SAP Commerce(Hybris)中的ORBEON 2018.2.3.201905172253 PE。当Hybris点击Orbeon应用程序创建一个新表单并获得中文的内联HTML时,我得到的是问号而不是中文字符 网址: 方法:获取 标题: [ { “密钥”:“hybris用户名”, “价值”:“-” }, { “密钥”:“hybris集团”, “价值”:“-” }, { “关键”:“hybris角色”, “价值”:“-” }, { “密钥”:“Orbeon客

我正在Tomcat 7.0上使用SAP Commerce(Hybris)中的ORBEON 2018.2.3.201905172253 PE。当Hybris点击Orbeon应用程序创建一个新表单并获得中文的内联HTML时,我得到的是问号而不是中文字符

网址: 方法:获取 标题: [ { “密钥”:“hybris用户名”, “价值”:“-” }, { “密钥”:“hybris集团”, “价值”:“-” }, { “关键”:“hybris角色”, “价值”:“-” }, { “密钥”:“Orbeon客户端”, “值”:“portlet” }, { “键”:“hybris-Proxy-09e4ff02-4715-4547-8f81-30082598eec9”, “值”:“37bb0017-2675-4617-945d-6693bdae8eb9” }, { “键”:“内容类型”, “值”:“text/html;charset=UTF-8” } ]

我发现Tomcat 7中有一个已知的汉字问题:

显然,Orbeon包含了一种使用web.xml文件中的oxf.xforms.renderer.default-encoding参数将字符编码设置为UTF-8的方法:

我已经在我的web.xml中尝试过了,并且从Orbeon应用程序中得到了相同的结果。我甚至使用Postman执行了相同的请求,以检查是否与我的Hybris店面存在集成问题,但结果是相同的

这是my web.xml的摘录:

    <filter>
        <filter-name>orbeon-xforms-filter</filter-name>
        <filter-class>org.orbeon.oxf.servlet.OrbeonXFormsFilter</filter-class>
        <!-- Uncomment this for the separate WAR deployment -->

        <init-param>
            <param-name>oxf.xforms.renderer.context</param-name>
            <param-value>/orbeon</param-value>
        </init-param>
        <init-param>
            <param-name>oxf.xforms.renderer.default-encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <!-- End separate WAR deployment -->
    </filter>
    <filter-mapping>
        <filter-name>orbeon-xforms-filter</filter-name>
        <url-pattern>/xforms-jsp/*</url-pattern>
        <!--Servlet 2.4 configuration allowing the filter to run upon forward in addition to request-->
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

orbeon xforms过滤器
org.orbeon.oxf.servlet.OrbeonXFormsFilter
oxf.xforms.renderer.context
/奥本
oxf.xforms.renderer.default-encoding
UTF-8
orbeon xforms过滤器
/XFormsJSP/*
要求
向前地
将过滤器的url模式更改为“/orbeon/fr/yforms/*”破坏了整个过程,我甚至无法用英语呈现表单

在Java中调试请求时,我尝试将HttpRequest对象的字符编码设置为UTF-8。同样的结果

我也尝试过这些方法,但效果不佳:

•将server.xml中元素的URIEncoding属性设置为URIEncoding=“UTF-8”

•将server.xml中元素的useBodyEncodingForURI属性设置为true

与此相关:

该线程的答案解释了我是如何本地化表单的

最奇怪的是,该URL的响应确实包含一些中文字符:下拉式语言选择器的标签。所有其他标签都是问号。太奇怪了

我想知道如何修改Tomat配置或Orbeon应用程序配置来修复此行为

谢谢


David

正如所料,问题与Orbeon无关

在我的Spring控制器中,从数据库获取表单的方法用@ResponseBody注释。控制器返回的字符串处于包含正确汉字的完美状态,但响应对象随后被Spring转换器截获

@RequestMapping(method = RequestMethod.GET, value = ...")
    @ResponseBody
    public String getFormDefinition(@PathVariable final String aaa, @PathVariable final String aaa,
            @RequestParam(value = "document", required = false) final String aaa, final HttpServletResponse response)
                    throws ServletException, IOException, YFormServiceException
    {
        return "html content";
    }
当有@ResponseBody注释时,响应由Spring的消息转换器处理。此处列出了默认转换器:

其中一个转换器是神奇的StringHttpMessageConverter。如果查看其源代码,可以看到它使用ISO-8859-1作为默认字符集。这些转换器处理的每个响应都将使用不支持汉字的ISO-8859-1进行编码

修复方法:

在我的web spring配置文件中,我添加了:

<mvc:annotation-driven>

      <mvc:message-converters register-defaults="false">
        <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg index="0" name="defaultCharset" value="UTF-8"/>
         </bean>
         <bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
         <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
      </mvc:message-converters>

    </mvc:annotation-driven>

使用register defaults=“false”可以告诉Spring不要使用任何默认转换器,而是使用下面提供的列表。在定义StringHttpMessageConverter时,我指定UTF-8(支持汉字)作为默认编码


好吧,正如所料,这个问题与Orbeon无关

在我的Spring控制器中,从数据库获取表单的方法用@ResponseBody注释。控制器返回的字符串处于包含正确汉字的完美状态,但响应对象随后被Spring转换器截获

@RequestMapping(method = RequestMethod.GET, value = ...")
    @ResponseBody
    public String getFormDefinition(@PathVariable final String aaa, @PathVariable final String aaa,
            @RequestParam(value = "document", required = false) final String aaa, final HttpServletResponse response)
                    throws ServletException, IOException, YFormServiceException
    {
        return "html content";
    }
当有@ResponseBody注释时,响应由Spring的消息转换器处理。此处列出了默认转换器:

其中一个转换器是神奇的StringHttpMessageConverter。如果查看其源代码,可以看到它使用ISO-8859-1作为默认字符集。这些转换器处理的每个响应都将使用不支持汉字的ISO-8859-1进行编码

修复方法:

在我的web spring配置文件中,我添加了:

<mvc:annotation-driven>

      <mvc:message-converters register-defaults="false">
        <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg index="0" name="defaultCharset" value="UTF-8"/>
         </bean>
         <bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
         <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
         <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
      </mvc:message-converters>

    </mvc:annotation-driven>

使用register defaults=“false”可以告诉Spring不要使用任何默认转换器,而是使用下面提供的列表。在定义StringHttpMessageConverter时,我指定UTF-8(支持汉字)作为默认编码


Et voila

刚刚意识到Orbeon 2018.2.3与Tomcat 7不兼容。我降级到Orbeon 2017.2.2,但问题仍然是一样的。Orbeon表单始终使用UTF-8。这似乎是yForms特有的。例如,这是可行的:如果某些东西起作用,yForms数据库不支持这些字符会不会有问题?刚刚意识到Orbeon 2018.2.3与Tomcat 7不兼容。我降级到Orbeon 2017.2.2,但问题仍然是一样的。Orbeon表单始终使用UTF-8。这似乎是yForms特有的。例如,这是可行的:如果某些事情可行,yForms数据库不支持这些字符是否会有问题?