0

xe:djxDataGridを介してデータをロードおよび保存する に取り組んでいますxe:restService。Domino 文書からデータをロードすると、この時点で ä や ö などのすべてのスカンジナビア文字が正常に表示されます。

ただし、データが変更されてサーバーに保存されると、ä は ä になり、ö は ö になります。これは、データが UTF-8 でエンコードされているが、ある時点で ISO-8559-1 として解釈されるためだと思います。

私はどこでもUTF-8を使用しようとしています:

  • Internet Site Document: 出力に UTF-8 を使用する - はい
  • データベース プロパティ: エンコーディング - utf-8
  • 形式: 文字セット - Unicode (UTF-8)

ページの応答ヘッダーには次の行があります。Content-Type:text/html;charset=utf-8

また、文字セットをどこでも ISO-8559-1 に変更しようとしましたが、それは役に立ちません。REST コントロールのcomputeWithFormプロパティを true に設定して、フォーム charset を使用するかどうかを確認しようとしましたが、効果はありません。

Firefox (17.0.1) では、すべて正常に動作します。この問題は、少なくともChromeIE9で発生します。

ブラウザー固有なので、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

@Esailja のアドバイスに従って、データをサーバーに保存する HTTP PUT リクエストを調べました。今回は問題のあるOpera 12.12 でテストしていました。PUT 要求のコンテンツ タイプは次のとおりです。

Content-Type: application/json

Firefox の場合:

Content-Type:application/json; charset=UTF-8

これは問題を説明していますが、それを修正するにはどうすればよいですか? 私の理解では、問題はPUT 要求で文字セットを設定しないdojox.grid.DataGrid (1.6) コントロールにあります。Firefoxは自動的に設定するようです。それとも、実際には ExtLib DataGrid にあり、Dojo コントロールで文字セットを設定できませんか? DataGrid で文字セットを設定する方法が見つかりません。

編集 4

REST コントロールのcontentTypeapplication/jsonプロパティを からに変更しようとしましたapplication/json; charset=UTF-8。それは役に立たず、PUT のコンテンツ タイプはまだapplication/json.

ありがとう、

  • パヌ
4

2 に答える 2

0

charsetDojoxhrPutをオーバーライドして HTTP ヘッダーを変更することで、 を変更できるはずです。

Sven Hasselbach が行っている方法は次のとおりですが、既存のヘッダーをオーバーライドせず (REST サービスで使用されるため)、追加/変更するだけで済むように、これを変更する必要があります。

/**
 * Cache Prevention for Dojo xhr requests
 *
 * Adds no-cache header and enables dojo's preventCache feature
 * for every dojo xhr call. This prevents the caching of partial
 * refreshs.
 *
 * @author Sven Hasselbach
 * @version 0.3
 *
 **/
dojo.addOnLoad(
    function(){
        if( !dojo._xhr )
        dojo._xhr = dojo.xhr;

        dojo.xhr = function(){        
            try{
                var args = arguments[1];   
                args["preventCache"] = true;
                args["headers"] = { "cache-control": "no-cache" };
                arguments[1] = args;
          }catch(e){}

          dojo._xhr( arguments[0], arguments[1], arguments[2] );
        }
    }
)

http://openntf.org/XSnippets.nsf/snippet.xsp?id=cache-prevention-for-dojo-xhr-requests

私はすでに回避策を講じていますが、ある時点でこれを試してみます。

于 2013-01-28T13:35:17.203 に答える