Я работаю над xe:djxDataGrid
, который загружает и сохраняет данные через xe:restService
. Он загружает данные из документов Domino, и в этот момент все скандинавские символы, такие как ä и ö, выглядят нормально.
Но если данные изменены и сохранены обратно на сервер, ä превращается в ä, а ö превращается в ö. Я думаю, это потому, что данные закодированы в UTF-8, но в какой-то момент интерпретируются как ISO-8559-1.
Я пытаюсь использовать UTF-8 везде:
- Документ интернет-сайта: использовать кодировку UTF-8 для вывода — Да
- Свойства БД: Кодировка — utf-8
- Форма: Набор символов — Юникод (UTF-8)
Заголовок ответа страницы имеет эту строку: Content-Type:text/html;charset=utf-8
Я также пытался изменить кодировку на ISO-8559-1 везде, но это не помогает. Я попытался установить для свойства computeWithForm элемента управления REST значение true, чтобы увидеть, заставляет ли это использовать кодировку формы, но это не имеет никакого эффекта.
В Firefox (17.0.1) все работает нормально! Проблема возникает по крайней мере в Chrome и IE9.
Поскольку это зависит от браузера, я думаю, что он ломается, когда Dojo отправляет данные в службу REST. Но я не видел способа конкретно указать Dojo использовать UTF-8.
HTML-тег выглядит следующим образом:
Chrome: <html lang="fi">
Firefox: <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
В качестве обходного пути я могу сделать это в поле Input Translations в форме:
@ReplaceSubstring(@ThisValue; "ä":"ö"; "ä":"ö");
Это работает, когда я включаю computeWithForm в элементе управления REST. Мне нужно включить все неанглийские символы, которые могут использоваться. Или есть общий способ конвертировать все?
изменить 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
Попытался изменить свойство contentType в элементе управления REST с application/json
на application/json; charset=UTF-8
. Это не помогло, и тип содержимого PUT по-прежнему application/json
.
Благодарность,
- Пану
ö
на странице, а другой показываетö
.. - person Esailija   schedule 12.01.2013