2013-01-14 2 views
1

문제가있어서 도움이 필요합니다.Play Framework의 Json 응답 문자 인코딩

모바일 응용 프로그램 용으로 Java 용 Play Framework v1.2.4가 설치된 서버에서 작업 중이며 Json 응답에 문제가 있습니다.

I가 항상 내가 특수 문자를 사용할 때 (같은 N, \ N, A, E 등)이 문제가 내 모바일 앱을 가지고 내 JSON 응답을 enconding에 대한 뷰를 사용하지만, 나는 실현 잘못했다. 여기

코드입니다 : 내가 응답을 구문 분석 올바르게 대신 .json보기 위해 자바 방법으로 할 노력했다

{ 
    "id":${data[0]}, 

    "messages": 
    [ 
     #{list items:data[1], as:'message'} 
     {   
      "text":"${message.text}" 
     }${message_isLast ? '' : ',' 
}#{/list} 
] } 

, 그것은 괜찮습니다. 즉, 코드입니다 : 내가 변경해야 응답을 많이 가지고 있기 때문에 내가 수동으로하지 않고 JSON 형식으로 올바르게 변수를 구문 분석보기에 뭔가를 할 수 있다면

JsonObject jsonOut = new JsonObject(); 
jsonOut.addProperty("id",conversation.id); 
JsonArray jsonArray = new JsonArray(); 

for(int i = 0; i < conversation.messages.size; i++) { 
    Message message = conversation.messages.get(i); 
    JsonObject jsonMessage = new JsonObject(); 
    jsonMessage.addProperty("text", message.text); 
    jsonArray.add(jsonMessage); 
} 

jsonOut.add("messages", jsonArray); 

renderText(jsonOut); 

내 질문입니다.

답변

1

JSON 문자열을 렌더링하기 위해 템플릿을 사용하는 것은 ... 나쁘다. (어쨌든 나는 대답을 끝내야한다.)

JSON serializer는 일반적으로 적절한 인용 부호를 사용하고, 특수 문자를 이스케이프 처리하고, 형식을 지정하고, 문자를 인코딩합니다 (필요한 경우) .... 템플릿에서 볼 수 있듯이 그렇게하지 않습니다.

템플릿을 사용하면 모든 것을 직접 처리해야하며 JSON 사양을 완벽하게 모르는 경우 실패 할 수 있습니다. ${message.text}을 올바른 위치에 붙여 넣는 것만이 아닙니다 ...

즉, 두 번째 방법은 항상 첫 번째 방법보다 좋습니다.

+0

답해 주셔서 감사합니다. 내 모든 신청서를 다시해야하지만 올바른 방법을 알고있는 것이 좋습니다. –

0

JSON의 기본 인코딩은 UTF-8입니다. Java의 기본 인코딩은 로케일에 따라 다릅니다.

재생을 실행중인 JVM에서도 UTF-8이 Charset.defaultCharset()으로 실행되고 있는지 확인해야합니다.

+0

그러나 내 서버가 Heroku 서버에 업로드되었습니다. 기본 인코딩을 UTF-8로 만들 수 있습니까? 방법? –

0

컴파일러와 편집기의 인코딩이 모두 "UTF-8"로 설정되어 있어야합니다. Play Framework와 JSON은 이미 UTF-8을 사용합니다. 속성 파일은 \u....으로 인코딩되어야합니다. 오류는 아마도 Java가 아닌 파일에 있습니다.