我正在开发一个xe:djxDataGrid
通过xe:restService
. 它从 Domino 文档加载数据,此时所有斯堪的纳维亚字符(如 ä 和 ö)看起来都正常。
但是如果数据被修改并保存回服务器,ä 会变成 ä 并且 ö 会变成 ö。我认为这是因为数据是 UTF-8 编码的,但在某些时候会被解释为 ISO-8559-1。
我正在尝试在任何地方使用 UTF-8:
- Internet 站点文档:使用 UTF-8 进行输出 - 是
- 数据库属性:编码 - utf-8
- 形式:字符集 - Unicode (UTF-8)
页面的响应头有这一行:Content-Type:text/html;charset=utf-8
我还尝试将字符集更改为 ISO-8559-1,但这无济于事。我尝试将 REST 控件的computeWithForm属性设置为 true 以查看是否使其使用表单字符集,但它没有效果。
在Firefox (17.0.1) 中一切正常!该问题至少出现在Chrome和IE9中。
因为它是特定于浏览器的,所以我认为当 Dojo 将数据发送到 REST 服务时它会中断。但我还没有看到专门告诉 Dojo 使用 UTF-8 的方法。
HTML 标记如下所示:
铬:<html lang="fi">
火狐:<html class="dj_gecko dj_contentbox" lang="fi">
djConfig 是这样的:djConfig="locale: 'fi-fi'
.
Domino 版本是 8.5.3FP3,ExtLib 日期是 20121217。
不幸的是,我不能强迫用户只使用 Firefox。任何想法如何解决这一问题?
编辑 1
ExtLib 演示应用程序中出现了同样的问题:xpagesext.nsf/REST_DojoGrid.xsp 和 xpagesext.nsf/REST_DojoGridJsonRest.xsp。
编辑 2
作为一种解决方法,我可以在表单上的字段输入翻译中执行此操作:
@ReplaceSubstring(@ThisValue; "ä":"ö"; "ä":"ö");
这在我在 REST 控件中启用computeWithForm时有效。我需要包括所有可能使用的非英语字符。还是有一种通用的方法来转换所有?
编辑 3
根据@Esailija 的建议,我检查了将数据保存到服务器的 HTTP PUT 请求。这次我用同样有问题的Opera 12.12 进行测试。PUT 请求的内容类型为:
Content-Type: application/json
使用 Firefox 是:
Content-Type:application/json; charset=UTF-8
这解释了问题,但如何解决呢?据我了解,问题出在dojox.grid.DataGrid (1.6) 控件上,它没有在 PUT 请求中设置字符集。Firefox 似乎会自动设置它。或者实际上是在 ExtLib DataGrid 中未能在 Dojo 控件中设置字符集?我还没有找到在 DataGrid 中设置字符集的方法。
编辑 4
尝试将REST 控件中的contentType属性从更改application/json
为application/json; charset=UTF-8
。这没有帮助,PUT 的内容类型仍然是application/json
.
谢谢,
- 帕努