当键包含拉丁扩展字符时如何使用 application.yml 传递 Map<String, String>

问题描述 投票:0回答:1
比如说,application.yml 和 Spring Boot 应用程序的配置类如下所示

application.yml

conv: map: ė: e ü: u somekey: somevalue ###other properties omitted for brevity

Config.java

package foo.bar; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import java.util.HashMap; import java.util.Map; @Getter @Setter @Configuration @ConfigurationProperties(prefix = "conv") public class Config { private Map<String, String> map = new HashMap<>(); /*other properties*/ }
在运行时,地图属性不会填充所有 3 个条目。它是最终出现在映射中的最后一个映射条目(somekey:somevalue)。它也是相同的条目,其键没有扩展拉丁字符,例如 

ėü。 但是,如果前两个映射条目的键和值像这样交换

conv: map: e: ė u: ü somekey: somevalue
生成的映射将恰好包含三个记录,这就带来了问题 - 如果我仍然想将扩展拉丁字符保留为映射中的键,如何处理它们?

java spring-boot application.properties
1个回答
0
投票
在 Spring Boot 应用程序的 YAML 文件中处理扩展拉丁字符时,您需要使用正确的编码和解码以避免字符编码问题。您可以使用像

\u

 这样的字符代码而不是字符字符轻松修复它。

conv: map: \u0117: e \u00FC: u somekey: somevalue
这里:

  • \u0117
     -> 
    ė
    ,
  • \u00FC
     -> 
    ü
这应该可以解决您遇到的任何其他问题。以下是获取 Unicode 的方法:

System.out.println( "\\u" + Integer.toHexString('÷' | 0x10000).substring(1) );

链接
    

© www.soinside.com 2019 - 2024. All rights reserved.