[Intellij / 인텔리제이] HttpUrlConnection 한글 깨짐
개발 유틸리티/intellij

[Intellij / 인텔리제이] HttpUrlConnection 한글 깨짐

실행환경 : intellij + springBoot(websocket)

 

네이버 챗봇 API를 연동하는 작업을 하는데 응답을 받아오는 한글이 깨져서 나왔다.

public String sendMessage(@Payload String chatMessage) throws IOException
    {

        URL url = new URL(apiUrl);

        String message =  getReqMessage(chatMessage);
        String encodeBase64String = makeSignature(message, secretKey);

        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/json;UTF-8");
        con.setRequestProperty("X-NCP-CHATBOT_SIGNATURE", encodeBase64String);

        con.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(con.getOutputStream());

        wr.write(message.getBytes("UTF-8"));
        wr.flush();
        wr.close();
        int responseCode = con.getResponseCode();

        BufferedReader br;

        if(responseCode==200) { // 정상 호출

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                            con.getInputStream()));
            String decodedString;
            String jsonString = "";
            while ((decodedString = in.readLine()) != null) {
                jsonString = decodedString;
            }
            //chatbotMessage = decodedString;

            JSONParser jsonparser = new JSONParser();
            try {
                JSONObject json = (JSONObject)jsonparser.parse(jsonString);
                JSONArray bubblesArray = (JSONArray)json.get("bubbles");
                JSONObject bubbles = (JSONObject)bubblesArray.get(0);
                JSONObject data = (JSONObject)bubbles.get("data");
                String description = "";
                description = (String)data.get("description");
                chatMessage = description;
            } catch (Exception e) {
                System.out.println("error");
                e.printStackTrace();
            }

            in.close();

        } else {  // 에러 발생
            chatMessage = con.getResponseMessage();
        }
        return chatMessage;
    }

위에 소스는 아래의 주소를 참조한 소스이다.https://medium.com/@dynamic_maize_coyote_676/spring-boot%EB%A1%9C-%EB%82%98%EB%A7%8C%EC%9D%98-chatbot-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-868b4a379209

 

Spring Boot로 나만의 Chatbot 구축하기

네이버 클라우드 플랫폼 상품중에 Chatbot이라는 상품이 있습니다. 해당 상품을 Spring Boot 프레임워크를 이용하여 웹상에서 동작하도록 만드는게 목표입니다.

medium.com

 

 

참조한 분은 문제가 없어보이는데 내 환경에선 한글이 깨져서 나왔다.

검색을 해보니... 문제는 "InputStreamReader"에 인코딩 형식이 빠져서 였다.

인코딩 변경 전

 

변경 후

 

참고사이트 : https://sarc.io/index.php/development/1444-httpurlconnection-utf-8

 

HttpUrlConnection 한글 깨짐 (UTF-8)

[{"id":"10","listid":"1","parentid":"0","videosource":"youtube","videoid":"KiwjxNKXfxY","imageurl":"https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/default.jpg,120,90;https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/mqdefault.jpg,320,180;https:\/\/i.ytimg.com\/vi\/KiwjxNKX

sarc.io

 

결론: ... intellij에 인코딩형식이 안맞아서 깨지는거 같은 느낌인데... 우선은 UTF-8을 넣으니 정상 작동했다! 

Intellij에 인코딩형식을 수정해서 테스트 해봐야 할 것 같다.