복붙노트

[SPRING] application.properties의 UTF-8 인코딩은 봄 부팅 속성

SPRING

application.properties의 UTF-8 인코딩은 봄 부팅 속성

내 application.properties에서 나는 일부 사용자 지정 속성을 추가 할 수 있습니다.

custom.mail.property.subject-message=This is a ä ö ü ß problem

이 클래스에서 나는 사용자 지정 특성의 표현이있다.

@Component
@ConfigurationProperties(prefix="custom.mail.property")
public class MailProperties {
    private String subjectMessage;
    public String getSubjectMessage() {
        return subjectMessage;
    }
    public void setSubjectMessage(String subjectMessage) {
        this.subjectMessage = subjectMessage;
    }

그리고 여기 내 MailProperties을 사용합니다 :

@Service
public class SimpleUnknownResponseMessage extends MailProperties implements UnknownResponseMessage{

    private JavaMailSender javaMailSender;

    @Autowired
    public SimpleUnknownResponseMessage(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    @Override
    public void placeUnknownResponse(BookResponse bookResponse) {
        MimeMessage message = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, "UTF-8");
            helper.setSubject(this.getSubjectMessage());            
            javaMailSender.send(message);

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

이것은 ä ö ü à 문제입니다 : 디버깅 동안 나는 내 this.getSubjectMessage () 변수가 내부에이 값이 있는지 확인할 수 있습니다. 그래서 내 메일을 보내기 전에 나는 이미 UTF-8 인코딩 문제가 있습니다.

난 이미 application.properties 파일과 UTF-8 인코딩을 확인.

내 IDE (STS / 이클립스) 및 프로젝트 속성은 UTF-8로 설정됩니다.

어떻게 사용자의 텍스트에 대한 UTF-8 인코딩이 application.properties이 파일 속성을 설정할 수 있습니까?

해결법

  1. ==============================

    1.이미 의견 .properties의 파일에서 언급 한 바와 같이 ISO 8859-1로 인코딩 할 것으로 예상된다. 하나는 다른 문자를 지정하는 유니 코드 이스케이프를 사용할 수 있습니다. 변환을 수행 할 수있는 도구도 있습니다. 여전히 소스에 좋아하는 인코딩을 사용할 수 있도록 예를 들어이 캔 자동 빌드에 사용.

    이미 의견 .properties의 파일에서 언급 한 바와 같이 ISO 8859-1로 인코딩 할 것으로 예상된다. 하나는 다른 문자를 지정하는 유니 코드 이스케이프를 사용할 수 있습니다. 변환을 수행 할 수있는 도구도 있습니다. 여전히 소스에 좋아하는 인코딩을 사용할 수 있도록 예를 들어이 캔 자동 빌드에 사용.

  2. ==============================

    2.당신의 구성 파일에 매개 변수를 인코딩와 PropertySource 주석을 추가 해보세요 :

    당신의 구성 파일에 매개 변수를 인코딩와 PropertySource 주석을 추가 해보세요 :

    @PropertySource(value = "classpath:application-${env}.properties", encoding = "UTF-8")
    

    희망이 도움이.

  3. ==============================

    3.나는이 같은 문제에 직면했습니다. 봄 부팅에서 응용 프로그램의 속성을로드하는 데 사용되는 2 PropertySourceLoader이 있습니다 :

    나는이 같은 문제에 직면했습니다. 봄 부팅에서 응용 프로그램의 속성을로드하는 데 사용되는 2 PropertySourceLoader이 있습니다 :

    그들은 파일 https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/META-INF/spring.factories에 나와있는

    그래서 우리는 제대로 UTF-8 파일에서 특성을로드 할 수있을 것 PropertySourceLoader 우리 자신의 구현을 작성하기로 결정했다. 아이디어는 응답 @BalusC에서이다 -의 ResourceBundle와 자원 속성에서 UTF-8을 사용하는 방법

    우리 PropertySourceLoader 구현 :

    public class UnicodePropertiesPropertySourceLoader implements PropertySourceLoader {
    
    @Override
    public String[] getFileExtensions() {
        return new String[]{"properties"};
    }
    
    @Override
    public PropertySource<?> load(String name, Resource resource, String profile) throws IOException {
        if (profile == null) {
            Properties properties = new Properties();
            PropertyResourceBundle bundle = new PropertyResourceBundle(new InputStreamReader(resource.getInputStream(), "UTF-8"));
            Enumeration<String> keys = bundle.getKeys();
            while (keys.hasMoreElements()) {
                String key = keys.nextElement();
                properties.setProperty(key, bundle.getString(key));
            }
            if (!properties.isEmpty()) {
                return new PropertiesPropertySource(name, properties);
            }
        }
        return null;
    }
    
    }
    

    그런 다음 우리는 콘텐츠와 파일 리소스 / META-INF / spring.factories을 만들어 :

    # Custom PropertySource Loaders
    org.springframework.boot.env.PropertySourceLoader=\
    your.own.package.UnicodePropertiesPropertySourceLoader
    

    이제 우리는 다음과 같은 순서로 우리의 응용 프로그램에서 3 PropertySourceLoader 있습니다 :

    노트!

    우리의 프로젝트에이 솔루션은 잘 작동합니다.

    최신 정보!

    그것은 PropertyResourceBundle가없이 UnicodePropertiesPropertySourceLoader의 부하 방법을 구현하는 것이 좋습니다 :

    @Override
    public PropertySource<?> load(String name, Resource resource, String profile) throws IOException {
        if (profile == null) {
            Properties properties = new Properties();
            properties.load(new InputStreamReader(resource.getInputStream(), "UTF-8"));
            if (!properties.isEmpty()) {
                return new PropertiesPropertySource(name, properties);
            }
        }
        return null;
    }
    
  4. ==============================

    4.-Dfile.encoding = UTF-8을 추가 자바 명령 행 agrs에 application.properties (및 다른 Java 특성뿐만 아니라, 환경 변수)에 텍스트에 대한 UTF-8 인코딩을 설정한다.

    -Dfile.encoding = UTF-8을 추가 자바 명령 행 agrs에 application.properties (및 다른 Java 특성뿐만 아니라, 환경 변수)에 텍스트에 대한 UTF-8 인코딩을 설정한다.

  5. ==============================

    5.단지 https://native2ascii.net/와 특수 문자로 텍스트를 변환

    단지 https://native2ascii.net/와 특수 문자로 텍스트를 변환

  6. from https://stackoverflow.com/questions/37436927/utf-8-encoding-of-application-properties-attributes-in-spring-boot by cc-by-sa and MIT license