• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

MessageSource 실습 중 실행창에 물음표로 출력되는 현상 질문

20.04.17 09:21 작성 조회수 747

0

IoC컨테이너의 MessageSource 인터페이스 기능을 실습하던 중 실행창에 영어 이외의 문자들이 물음표로만 찍히는 현상이 있는데요.

왜 이런 현상이 발생하며 어떻게 해야 해결할 수 있을까요?

각각의 message properties file명과 내용은 다음과 같습니다.<o:p></o:p>

1.     messages.properties<o:p></o:p>

è  title={0} Spring<o:p></o:p>

2.     messages_ja_JP.properties<o:p></o:p>

è  title = {0}スプリング<o:p></o:p>

3.     messages_ko_KR.properties<o:p></o:p>

è  title={0} 스프링<o:p></o:p>

message source를 출력하기 위한 runner class 코드는 다음과 같습니다.

package me.dave.springapplicaitioncontext;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Component;

import java.util.Locale;

@Component
public class AppRunner implements ApplicationRunner {
    @Autowired
    MessageSource messageSource;

    public void run(ApplicationArguments args) throws Exception {
        Locale.setDefault(new Locale("en", "US"));
        System.out.println(Locale.getDefault());

        System.out.println(messageSource.getMessage("title", new String[]{"Hello "}, Locale.getDefault()));
        System.out.println(messageSource.getMessage("title", new String[]{"Hello "}, Locale.KOREA));
        System.out.println(messageSource.getMessage("title", new String[]{"Hello "}, Locale.JAPAN));
    }
}

답변 6

·

답변을 작성해보세요.

0

angelo_k님의 프로필

angelo_k

2022.08.04

동일한 문제가 발생돼 2년전 글이지만 제가 해결한 방법을 남겨봅니다.

editor -> file encoding -> Properties file 의 default encoding을 utf-8로 변경하여 해결하였습니다.

0

김대희님의 프로필

김대희

질문자

2020.04.29

결국 원인은 못찾았고 프로젝트를 새로 만들어서 해결했습니다.

0

김대희님의 프로필

김대희

질문자

2020.04.18

message resource 내용이 깨진것을 확인했습니다. 이를 되돌리고 다시 test했으나 여전히 정확히 읽어오지는 못하네요. 좀더 연구해봐야겠습니다.

0

흠. 프로퍼티 파일에 입력할 때 값이 잘못들어간거 같은데요? 제가 해당 프로젝트를 받아서 열어보니까 프로퍼티에 입력된 값 자체가 깨져있습니다.

깃헙에서 봐도 그렇구요.
https://github.com/camel-master/SpringExample/blob/master/src/main/resources/messages_ja_JP.properties

0

김대희님의 프로필

김대희

질문자

2020.04.18

빠른 답변에 감사드립니다.

encoding과 관련한 여러가지 시도를 해봤지만 모두 실패했습니다.

1. intellij의 file > setting > Editor > File Encodings 에서 인코딩을 UTF-8로도 변경해보고

2. project의 ~.vmoptions file에서 VM option으로 -Dfile.encoding=UTF-8도 설정해봤습니다.

추가로 확인된 사항은 runner class에서 stdio로 콘솔에 단순 문자열을 출력해도 한글이 

깨져서 출력됩니다. message resource를 출력할 때는 ????형태였지만 이 것은 완전히

깨진 형태입니다. 혹시 이 것이 message resource에 문제가 발생하는 원인이 아닐까

조심스럽게 예상해봅니다.

테스트 하던 중 특이한 점을 하나 발견했는데 intellij를 실행해서 최근 project를 자동으로 load 할 때

최대한 빠르게 application을 실행하면 stdio를 통한 문자열 출력이 정상적으로 진행 된다는 것입니다.

이것으로 미루어보아 build tool 실행 중에 어떤 문제가 발생하는게 아닐까 생각됩니다만

도무지 찾아낼 수가 없네요.

기선님의 강의와는 다르게 build tool로 gradle을 사용했습니다만, 또 다른 gradle을 사용한

project에서는 한글 콘솔출력이 깨지지 않음을 확인했습니다.

문제의 Project를 올린 Gihub repository를 공유해 드립니다.

https://github.com/camel-master/SpringExample.git

감사합니다. 

0

흠.. 콘솔 창의 인코딩이 UTF-8이 아니라 그런거 같은데요. 똑같은 코드를 만들어서 제 환경에서 테스트 해봤더니 잘 보이더라구요. 혹시 윈도우를 쓰고 계시다면 다음 글 참고하셔서 UTF-8로 변경하고 해보시겠어요?