【问题标题】:AEM/CQ5 6.2 UTF-8 Character encodingAEM/CQ5 6.2 UTF-8 字符编码
【发布时间】:2017-02-02 07:29:06
【问题描述】:

我无法获取特殊字符或来自不同语言(如法语)的字符。 已将请求参数从 ISO-8859-1 更改为 UTF-8。 也对 Main Servlet 进行了更改。

例如:“İş hayatında ne çok engelle karşılaşıldığını, her rakamın değerini, zamanın en büyük rakip olduğunu, güvenliği elden bırakmamayı ve iyi bir iş ortağının Mercedesönemini, bilen bilir. Sprinter'i ve yeni Vito'suyla ticari araçlar kazanmak için doğdular。

Tıpkı sizin gibi。”

在尝试为此生成 json 输出时,它没有出现。

请提出一种方法。 谢谢。

【问题讨论】:

  • 您尝试从哪里生成 JSON 输出?这是自定义 servlet 吗?

标签: utf-8 character-encoding aem iso-8859-1


【解决方案1】:

我不确定您的实现如何,下面是一个示例,可以帮助您使用 UTF-8 数据调用服务(取您的示例数据)

使用方法参数调用服务引用的示例 JSP 下面

<%--
  Osgi HelloService Calling component.
--%><%
%>
<%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false" %>
<%@ page import="org.json.simple.JSONObject,java.util.*"%>
<%@ page import="com.mycompany.mytestservice.HelloService" %>  
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- getting my service reference -->
<%
com.mycompany.mytestservice.HelloService hs = sling.getService(com.mycompany.mytestservice.HelloService.class);
%>

<!-- got the string back as jobject -->
<%
JSONObject jobject = hs.getJsonObj("İş hayatında ne çok engelle karşılaşıldığını, her rakamın değerini, zamanın en büyük rakip olduğunu, güvenliği elden bırakmamayı ve iyi bir iş ortağının önemini, bilen bilir. Sprinter’i ve yeni Vito’suyla, Mercedes-Benz hafif ticari araçlar kazanmak için doğdular. Tıpkı sizin gibi."); %>

<br/>
<b>UTF string converted to JSON Object ::</b><br/>
<!-- display into page -->
<%
out.println(jobject);
%>

HelloService 接口

package com.mycompany.mytestservice;

import org.json.simple.JSONObject;

/**
 * A simple json service interface
 */
public interface HelloService {

    /**
     * @return the JSON Object of requested data
     */
    public JSONObject getJsonObj(String jsonobjp);

}

HelloServiceImpl 类

package com.mycompany.mytestservice.impl;

import javax.jcr.Repository;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mycompany.mytestservice.HelloService;

/**
 * One implementation of the {@link HelloService}.
 */
@Service
@Component(metatype = false)
public class HelloServiceImpl implements HelloService {

 protected final Logger log = LoggerFactory.getLogger(this.getClass());

    public JSONObject getJsonObj(String jsonobjp){
    JSONObject jsonobj = new JSONObject();
    try { 
        jsonobj.put("testint", 30);
        jsonobj.put("myjspstring", jsonobjp); // adding to json object
        JSONArray list = new JSONArray();
        list.add("message 1");
        list.add("message 2");
        jsonobj.put("messages", list);
       log.info("*** JSON Object ***" + jsonobj);

    } 
 catch (Exception e) {
    e.printStackTrace();
}
return jsonobj; // return json object
    }

}

最终当jsp调用产生以下JSON对象的输出

注意:确保您处理 \u2019 unicode 字符,由于 JSON 实现,该字符不是预期的输出。更多详情来自here

你可以找到另一个类似的例子how-to-set-utf-8-response-on-dopost-call

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-09
    • 2017-07-27
    • 2011-06-17
    • 2018-07-02
    • 2017-04-27
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多