JSON 문자 부호화
Java 웹 응용 프로그램이 다음과 같은 JSON을 반환하는 AJAX 요청을 제출합니다.
{'value': 'aériennes'}
웹페이지에 'aérienes'라고 표시되어 있으면 'aérienes'로 표시되기 때문에 문자 인코딩에 문제가 있는 것 같습니다.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 문자열의 문제를 수정하려면 UTF-8을 HTTP 응답 인코딩으로 사용하도록 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 데이터의 Content-Type은 다음과 같아야 합니다. 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와 @Products 및 @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
원하는 문자 인코딩을 사용하여 시도합니다.외국어도 취급하고 있습니다.
또한 모든 응답에서 애플리케이션/json;utf-8을 수신하기 위해 컨트롤러 클래스 위의 스프링 주석 RequestMapping을 사용할 수 있습니다.
@Controller
@RequestMapping(produces = {"application/json; charset=UTF-8","*/*;charset=UTF-8"})
public class MyController{
...
}
위의 권장 솔루션이 문제를 해결하지 못한 경우, 이 방법은 다음에도 도움이 될 수 있습니다.
는 스프링스 json을 이었습니다.@ResponseBody
이렇하하 하하움도도 요요요요 。
디스패처 서블릿에 다음 콩을 추가합니다.
<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)
응답에 응답을 쓰기 전에 응답 인코딩을 설정해야 합니다.
주석이나 반응일 수 있습니다.set Content Encoding(String s) 또는 짝수 응답입니다.setHeader(String s1, String s2)
응답 출력 또는 기록기를 사용하기 시작하면 정의되거나 추측된 인코딩이 결과 이진 데이터의 문자를 인코딩하는 데 사용됩니다.그렇기 때문에 나중에 변경할 수 있는 옵션이 없습니다.
언급URL : https://stackoverflow.com/questions/3995559/json-character-encoding
'programing' 카테고리의 다른 글
React Router - 버전 업데이트 후 Router에서 스크립트 오류를 입력합니다. (0) | 2023.03.10 |
---|---|
generator-karma가 형제자매의 peerDependencies 요구 사항을 충족하지 않습니다. (0) | 2023.03.10 |
Embeddable과 EmbeddedId 사이의 JPA 매핑 @ManyToOne (0) | 2023.03.10 |
(x)자 뒤에 텍스트를 자르다 (0) | 2023.03.05 |
AJAX를 사용하여 PHP 파일에서 응답 가져오기 (0) | 2023.03.05 |