programing

JSON 문자 부호화

elseif 2023. 3. 10. 21:14

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ériennesISO-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