当前位置: 首页 > 知识库问答 >
问题:

Orbeon中文表格返回带有问号

濮阳翔
2023-03-14

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

URL:http://localhost:9001/orbeon/fr/yforms/myform/new?orbeon-embeddable=true

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

https://books.google.co.nz/books?id=kNVe8lzTec0C

显然,Orbeon包含了一种使用oxf将字符编码设置为UTF-8的方法。xforms。渲染器。web中的默认编码参数。xml文件:

https://doc.orbeon.com/xforms/filter

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

这是我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>

将过滤器的url模式更改为“/orbeon/fr/yform/*”打破了整个局面,我甚至不能用英语渲染表单。

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

我也试过这些没有好结果:

•在服务器中的元素上设置URIEncoding属性。xml到URIEncoding=“UTF-8”。

•在服务器中的元素上设置useBodyEncodingForURI属性。xml转换为true。

与此相关: Orbeon表单本地化使用当前站点的会话语言

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

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

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

谢谢

大卫

共有1个答案

朱令
2023-03-14

正如所料,问题与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的消息转换器处理。此处列出了默认转换器:https://www.baeldung.com/spring-httpmessageconverter-rest

其中一个转换器是神奇的StringHttpMessageConzer。如果您检查它的源代码,您可以看到它使用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>

使用recster-defax="false",您对Spring说不要使用任何默认转换器,而是使用下面提供的列表。定义StringHttpMessageConzer时,我指定UTF-8(支持汉字)作为默认编码。

等瞧

 类似资料:
  • 如标题所示,如果“模型”不完整,我所要做的就是返回一个自定义错误集合。 虽然我在积极地“搜索/谷歌”,但我还没有找到解决问题的办法。 我可以使用“modelstate”,但是由于“定制”,我想手动这样做。 代码如下: null null 基于自定义属性查找不完整的属性 属性样本 所以忽略后面的两个片段,更多的是给出一个完整的流程概述。我完全理解有一些“开箱即用”的技术,但我确实喜欢创建自己的实现。

  • Orbeon Forms 提供了一套web表单的构建和部署方案, 实现了W3C XForms标准, 并提供一个免费的开源的社区版,以及商业版。 Orbeon Forms 已经在世界各地的多个行业中得到应用,包括政府,银行,医疗保健,电信,和教育。 Orbeon Forms 主要包括2部分: Form Builder  可在线设计表单 Form Runner  form的运行环境,包括表单管理、数据

  • 在上周之前,我使用Python的经验非常局限于我们网络上的大型数据库文件,突然间,我开始尝试从html表中提取信息。 经过大量阅读,我选择在Python2.7中使用lxml和xpath来检索相关数据。我使用以下代码检索了一个字段: 产生了以下清单: 我认识到CR/LF和制表符转义字符,我想知道如何避免它们?

  • 我正在尝试使用ASP.NET Web API返回一个JSON文件(用于测试)。 在Fiddler中,它确实显示为Json类型,但当我在Chrome中调试并查看对象时,它显示为单独行数组(左)。正确的图像是当我在使用它时该对象应该看起来的样子。 有人能告诉我应该返回什么来实现正确格式的Json结果吗?

  • 本文向大家介绍Java Web Service返回带有>和相关面试题,主要包含被问及Java Web Service返回带有>和时的应答技巧和注意事项,需要的朋友参考一下 框架正在按照您所说的去做。您的方法返回,表示生成的WSDL应该具有类型为的响应消息。众所周知,XML字符串必须将某些字符编码为字符实体引用(即“ ”变为“ ”,因此XML解析器将其视为字符串,而不是您期望的XML元素的开头)。如

  • iam使用服务器端的docusign包,允许我的客户签名并下载签名文件。在如何客户完成签名后,我试图存储文档,但pdf是空白的。我的账户在生产中。知道为什么吗?