JSON 문자 인코딩
내 Java 웹 애플리케이션은 다음과 같은 JSON을 반환하는 AJAX 요청을 제출합니다.
{'value': 'aériennes'}
웹 페이지에 'aériennes'가 표시되면 'a'riennes'로 표시되어 문자 인코딩 문제가있는 것 같습니다. AJAX 응답 헤더에는 다음이 포함됩니다.
Content-Type application/json
문자 세트 정보를 포함하지 않는 것 같습니다. 나는 이것을 다음과 같이 변경해야한다고 생각한다.
Content-Type text/html; charset=iso-8859-1 (or charset=utf8)
앱의 서버 측은 Spring MVC이며 각 응답에 대한 기본 문자 집합을 설정하는 방법이 있어야한다고 생각합니다.
증상은 원래 UTF-8 인코딩이었던 JSON 문자열이 ISO-8859-1 인코딩을 사용하여 HTTP 응답에 기록되었고 웹 브라우저가이를 UTF-8로 표시하도록 지시했음을 나타냅니다. UTF-8을 사용하여 작성되었고 ISO-8859-1로 표시 되었다면 aériennes
. ISO-8859-1을 사용하여 작성 및 표시 되었다면 a�riennes
.
ISO-8859-1로 잘못 쓰여진 JSON 문자열 문제를 해결하려면 HTTP 응답 인코딩으로 UTF-8을 사용하도록 webapp / Spring을 구성해야합니다. 기본적으로 다음 작업을 수행해야합니다.
response.setCharacterEncoding("UTF-8");
콘텐츠 유형 헤더를 변경하지 마십시오. JSON에는 완벽하게 괜찮으며 UTF-8로 표시되었습니다.
이것이 더 이상 관련이 있는지 모르겠지만 @RequestMapping 주석으로 수정했습니다.
@RequestMapping(method=RequestMethod.GET, produces={"application/json; charset=UTF-8"})
첫째, 게시 된 데이터가 유효한 JSON이 아닙니다. 이것은 다음과 같습니다.
{"value": "aériennes"}
큰 따옴표에 유의하십시오. 필수입니다.
JSON 데이터에 대한 콘텐츠 형식이 되어야합니다 application/json
. 실제 JSON 데이터 (위에있는 데이터)는 UTF-8, UTF-16 또는 UTF-32를 사용하여 인코딩해야합니다. UTF-8을 사용하는 것이 좋습니다.
Wireshark와 같은 도구를 사용하여 네트워크 트래픽을 모니터링하고 데이터가 어떻게 보이는지 확인할 수 있습니다 c3 89
. é에 대한 바이트 를 확인해야합니다 . 나는 Spring과 함께 일한 적이 없지만 JSON 인코딩을 수행하는 경우 아마도 제대로 처리 될 것입니다.
JSON이 브라우저에 도달하면 유효하면 좋습니다. 그러나 JSON 응답의 데이터를 웹 페이지에 어떻게 삽입합니까?
마침내 해결책을 얻었습니다.
이 줄만 넣어
@RequestMapping(value = "/YOUR_URL_Name",method = RequestMethod.POST,produces = "application/json; charset=utf-8")
이것은 확실히 도움이 될 것입니다.
그것은 나에게 정확히 똑같이 일어났습니다.
<%@ page language="java" contentType="application/json" pageEncoding="UTF-8"%>
그러나 이것은 나를 위해 작동합니다.
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
추가 시도
;charset=UTF-8
contentType에.
response.setContentType("application/json;charset=utf-8");
여기의 답변은 완전히 관련이 없지만 문제를 해결하는 데 도움이되었습니다. javax.ws.rs API와 @Produces 및 @Consumes 주석을 사용하고 동일한 문제가 발생했습니다. 웹 서비스에서 반환 한 JSON은 UTF-8이 아닙니다. 내 컨트롤러 기능 위에 다음 주석으로 해결했습니다.
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8")
과
@Consumes(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8")
모든 엔드 포인트의 get 및 post 기능에서. 나는 문자 세트를 설정하지 않았고 이것이 해결되었습니다. 이것은 저지의 일부이므로 Maven 종속성을 추가해야 할 수도 있습니다.
사용하는 경우 선택한 문자 인코딩을 사용 하여 StringEntity
시도 하십시오 . 외국 문자도 처리합니다.
또한 모든 응답에서 application / json; utf-8 을 수신하기 위해 컨트롤러 클래스 위에 스프링 주석 RequestMapping을 사용할 수 있습니다 .
@Controller
@RequestMapping(produces = {"application/json; charset=UTF-8","*/*;charset=UTF-8"})
public class MyController{
...
}
위의 제안 된 해결 방법으로 문제가 해결되지 않은 경우 (나의 경우) 도움이 될 수 있습니다.
내 문제는 Springs를 사용하여 응답에서 json 문자열을 반환한다는 것 @ResponseBody
입니다. 이 작업을 수행하는 경우 도움이 될 수 있습니다.
디스패처 서블릿에 다음 Bean을 추가하십시오.
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
(여기에서 찾았습니다 : http://forum.spring.io/forum/spring-projects/web/74209-responsebody-and-utf-8 )
참조 URL : https://stackoverflow.com/questions/3995559/json-character-encoding
'IT story' 카테고리의 다른 글
for 루프를 사용하지 않고 String 배열을 인쇄 할 수있는 방법이 있습니까? (0) | 2021.01.06 |
---|---|
C #에서 글로벌 키워드를 사용하는 이유는 무엇입니까? (0) | 2021.01.06 |
래퍼 내 두 범위 중 하나의 텍스트 오버플로 줄임표 (0) | 2021.01.06 |
Nested Fragment (Android 4.2)를 사용하여 ViewPager 내에 Fragment를 추가하는 방법 (0) | 2021.01.06 |
통합 테스트 전체 객체를 Spring MVC 컨트롤러에 게시 (0) | 2021.01.06 |