Character encoding 使用Orbeon为查询字符串指定字符编码
在读取UTF-8查询字符串时,我们遇到了字符编码问题。一个单独的外部应用程序构建到我们的Orbeon应用程序的链接,例如:Character encoding 使用Orbeon为查询字符串指定字符编码,character-encoding,url-encoding,orbeon,xforms,Character Encoding,Url Encoding,Orbeon,Xforms,在读取UTF-8查询字符串时,我们遇到了字符编码问题。一个单独的外部应用程序构建到我们的Orbeon应用程序的链接,例如: http://localhost:8080/ops/encoding-test/?message=hello%20world http://localhost:8080/ops/encoding-test/?message=it%E2%80%99s%20a%20message 我们的应用程序模型使用处理器读取查询字符串,然后在视图中显示该字符串。在上面的第一种情况下,应
http://localhost:8080/ops/encoding-test/?message=hello%20world
http://localhost:8080/ops/encoding-test/?message=it%E2%80%99s%20a%20message
%E2%80%99
是UTF-8撇号的URL编码,并导致应用程序出现以下错误:
2012-09-13 12:21:43,383 ERROR XSLTTransformer - Error at line 174 of oxf:/config/theme-examples.xsl:
Illegal HTML character: decimal 128
2012-09-13 12:21:43,384 ERROR ProcessorService - Exception at line 174 of oxf:/config/theme-examples.xsl
; SystemID: oxf:/config/theme-examples.xsl; Line#: 174; Column#: -1
org.orbeon.saxon.trans.XPathException: Illegal HTML character: decimal 128
- 完整日志输出:
- 应用程序测试用例来源:-根据orbeon-3.9.1.201202031753-PE编写和测试
%80
。请注意,在日志中,主题不仅会引发异常,xforms检查器也会引发异常
似乎URL被解码为Latin1而不是UTF-8,因为调试处理器列出了一条带有三个撇号字符的消息。到目前为止,在我的研究中,HTTP似乎没有办法指定查询字符串本身的编码
(交叉发布到ops用户邮件列表中)Orbeon表单依赖于servlet API返回的内容:请参阅。因此,这似乎是您需要在应用服务器级别设置的内容;如果使用Tomcat,您可以这样做。为了更好,指定对于IRIs,百分比编码应该表示字符的UTF-8形式,因此您的外部应用程序至少在做一件合理的事情。然而,在此之前,URI的定义没有详细说明非ASCII数据应该使用什么字符编码。在实践中,软件通常使用HTML页面编码或HTTP头进行猜测。使用oxf:request找出
accept字符集
标题所说的内容。您可以重新配置请求者吗?在tomcat的server/conf.xml
中添加URIEncoding
属性解决了这个问题,正如useBodyEncodingForURI
属性解决了这个问题。这两个值都记录在中,并包含在中的常见问题解答中