当前位置: 首页 > 知识库问答 >
问题:

Spring Boot默认属性编码更改?

刘兴朝
2023-03-14

我试图找到一种方法,为通过@value注释从Spring Boot中的application.property文件访问的属性设置UTF-8编码。到目前为止,我已经通过创建一个bean成功地将编码设置到我自己的属性源:

@Bean
@Primary
public PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
    configurer.setLocation(new ClassPathResource("app.properties");
    configurer.setFileEncoding("UTF-8");
    return configurer;
}

这样的解决方案存在两个问题。这一次,它与Spring Boot默认使用的“application.properties”位置(http://docs.Spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config)不起作用,我被迫使用不同的文件名。

另一个问题是,使用它,我只能手动定义和排序多个源的受支持位置(例如,在jar中vs外部jar属性文件,等等),从而重做一个已经做好的工作。

如何获得对已配置的PropertySourcesPlaceHolderConfigureer的引用,并在应用程序初始化的正确时间更改它的文件编码?

编辑:也许我在别的地方做错了?这是造成我实际问题的原因:当我使用application.properties允许用户将个人名称应用于从应用程序发送的电子邮件时:

@Value("${mail.mailerAddress}")
private String mailerAddress;

@Value("${mail.mailerName}")
private String mailerName;                       // Actual property is Święty Mikołaj

private InternetAddress getSender(){
    InternetAddress sender = new InternetAddress();
    sender.setAddress(mailerAddress);
    try {
        sender.setPersonal(mailerName, "UTF-8"); // Result is Święty Mikołaj
        // OR: sender.setPersonal(mailerName);   // Result is ??wiÄ?ty Miko??aj
    } catch (UnsupportedEncodingException e) {
        logger.error("Unsupported encoding used in sender name", e);
    }
    return sender;
}

当我添加了如上图所示的placeholderconfigureerbean,并将我的属性放置在'app.properties'中时,它就会很好地被爱着。只要将文件重命名为'application.properties'就会中断它。

共有1个答案

申屠洛华
2023-03-14

显然,由Spring Boot的ConfigFileApplicationListener加载的属性是以ISO 8859-1字符编码进行编码的,这是根据设计和格式规范进行的。

另一方面,.yaml格式支持UTF-8开箱即用。一个简单的扩展更改为我修复了问题。

 类似资料:
  • 问题内容: 从控制台运行应用程序时,Python存在许多“无法编码”和“无法解码”的问题。但是在 IDE中,默认字符编码设置为UTF-8,我很好。 我四处寻找设置默认编码的方法,有人说在启动时会删除该函数,因此我们无法使用它。 那么什么是最好的解决方案? 问题答案: 这是一个更简单的方法(黑客),可为你提供从中删除的功能sys: 不过,这并不是一件安全的事情:这显然是一个,因为有意将其从sysPy

  • 问题内容: 有没有办法更改String(byte [])构造函数使用的编码? 在我自己的代码中,我使用String(byte [],String)指定编码,但是我使用的是无法更改的外部库。 输出为: 我尝试更改系统属性,但是它不起作用。 问题答案: 您需要在启动JVM之前更改语言环境。看到: Java,错误ID 4163515 有些地方似乎暗示您可以通过在启动JVM时设置file.encoding

  • 20.1 属性默认值 Spring Boot支持的一些库使用缓存来提高性能。例如,模板引擎会缓存已编译的模板,以避免重复解析模板文件。此外,Spring MVC可以在服务静态资源时将HTTP缓存的头部添加到响应中。 虽然缓存功能对生产环境非常有益,但在开发过程中可能会产生反作用,使您无法看到程序中刚刚做出的更改。由于这个原因,spring-boot-devtools默认会禁用那些缓存选项。 缓存选

  • 我在Intellij IDEA 2016.3中将属性文件的默认编码设置为“ISO-8859-1”,然后创建属性文件,但文件编码仍然是UTF-8: 知道吗?还是这应该成为一个问题? 更新: 在将项目和系统默认编码更改为ISO-8859-1,然后创建新的属性文件后,它仍然使用UTF-8编码,我无法手动更改属性文件编码,同时我可以更改其他文件的编码。 更新: 我在youtrack上创建了一个问题: ht

  • 本文向大家介绍C#属性的默认值,包括了C#属性的默认值的使用技巧和注意事项,需要的朋友参考一下 示例 可以使用初始化程序(C#6)设置默认值 如果它是只读的,则可以返回如下值:            

  • 我只是想知道有没有什么方法可以为log4j中的属性替换提供默认值呢? 我想在Java系统属性中传递文件路径,然后与“${env:MySystemProperty}”一起使用。但如果开发人员忘记设置此属性怎么办?那么我希望在log4j2.xml中定义一些有意义的默认值。 你知道如何实现这个功能吗? 编辑: 环境替换对我不起作用: standalone.conf log4j2.xml 我可以在wild