Jstree, плагин JSON_DATA и специальные символы

У меня есть древовидная структура jstree на моей странице, которая использует данные JSON и AJAX. Некоторые скандинавские символы (ä и ö) обрабатываются неправильно.

Jstree получает структуру JSON через фильтр сервлета Java. Структура кодируется как UTF-8. Когда я смотрю на возвращаемую структуру JSON с помощью firebug, скандинавские символы отображаются правильно. Я попытался изменить кодировку символов на ISO 8859-4, чтобы посмотреть, поможет ли это, но это не помогло.

Я не уверен, какие части кода имеют отношение к этой проблеме, но вот некоторые части.

Инициализация дерева:

.jstree({   
    "json_data" : {
        "ajax" : {
            "url" : hostUrl+"/json/getAreaTree?treeType=Areas",
            "data" : function (n) {
                    return { id : n.attr ? n.attr("id") : 0 };
                }
        }
    },

Некоторый код фильтра сервлета:

protected class GetAreaTreeContext extends ActionContext implements StreamResponseContext{

    private byte[] bytes;

    public GetAreaTreeContext() {
        super("getAreaTree");
    }

    @Override
    public byte[] getBytes() {
        return this.bytes;
    }

    @Override
    public String getContentType() {
        return "application/json; charset=UTF-8";
    }

    @Override
    protected boolean doAction() {
        if (!getWebSessionObject().isValid())
            return false;
        Map<String,Object> p = getParameterMap();
        String type = (String)p.get("treeType");
        String id = (String)p.get("id");
        if(id.equals("1") || id.equals("0") || id.equals("id1") || id.equals("id0")){ //get the tree only if request comes from initial situation (id=0) or the root (id=1)
            try {
                this.bytes = ObjectFactory.getInstance().getDbManager().getAreaFolderTree(type, phone).getBytes();
            } catch (Exception ex) {
                this.result = "";
            }
            return bytes.length > 0;
        }else{
            //init the array again so that when empty folders make ajax requests, they dont get the tree
            this.bytes = new byte[0];
            return true;
        }
    }

}

Как получить плагин jstree JSON_DATA для обработки скандинавских символов в кодировке UTF-8?


person T.Kaukoranta    schedule 23.07.2012    source источник
comment
Ммм... вы пытались добавить 'contentType: application/json charset=utf-8' в свойства json_data›ajax?   -  person Ricola3D    schedule 23.07.2012
comment
Я пробовал, ничего не сделал..   -  person T.Kaukoranta    schedule 26.07.2012
comment
Удачи в решении этой проблемы? Я из Бразилии, и у нас также есть некоторые общие специальные символы, такие как ç, ã и é.   -  person Felipe Leão    schedule 28.06.2014
comment
Хм, это произошло много лет назад, но IIRC это была ошибка кодирования строки где-то еще? хотя могу ошибаться..   -  person T.Kaukoranta    schedule 15.08.2014


Ответы (1)


Я столкнулся именно с этой проблемой сегодня. Несмотря на то, что я мог видеть, что Øst возвращается в JSON для обратного вызова данных, когда я проверял узел в отладчике (Safari), он отображался как �st. Однако мне помогло предложение Ricola3D. Я добавил Content-Type: application/json;charset=UTF-8 в заголовки ответа, и рендеринг сразу стал чистым.

YMMV: наш стек на стороне сервера — это Clojure+Ring, проксируемый за Apache, и заголовок Content-Type, похоже, влияет на кодировку, возвращаемую с сервера, либо из Ring, либо из нижележащего уровня причала. Я, честно говоря, не уверен, меняет ли добавление заголовка типа контента то, как синтаксический анализатор JSON в браузере декодирует тело ответа, или меняет способ кодирования тела ответа на веб-сервере.

person Eric Schoen    schedule 28.01.2017