在 spring-boot app 中使用 Ascii 字符串作为环境变量的值

Use Ascii string as value of a environment variable in spring-boot app

在我的 spring 引导应用程序中,我在 ConfigurationProperties 中定义了一个具有默认值(Ascii 格式)的模板字段:

@Getter
@Setter
@Configuration
@ConfigurationProperties("app.template")
public class AppTemplateProps {

    String greeting = "\u00bfQu\u00e9 est\u00e1s haciendo %s?";

}

AppTemplateProps.greeting的值是正确的(是原生的):

¿Qué estás haciendo %s?

但是当我用相同的值定义app.template.greeting环境变量时,AppTemplateProps.greeting的值不正确(不是原生的):

\u00bfQu\u00e9 est\u00e1s haciendo %s?

那么我应该怎么做才能从环境变量中获取正确的(本机)值?

ASCII 是一种仅定义 95 个字符的编码,不包括 áé¿。所以你说的是不可能的; java 字符串不是 ASCII,这就是 greeting 部分有效的原因。所以,是的,如果你想在 ASCII 中存储一个 é 通常你不能这样做; 在 java 源文件中 \u 机制,但是......它只适用于源代码。你不能只读一个字符串然后神奇地为你应用这些东西。

没有简单的答案 - 要么确保你的输入是基于 UTF_8,然后把 é 和朋友放在那儿,要么写一些适用于 \u 的代码解码。 JSON 字符串也支持这一点,所以这是一种方式。您也可以编写一些代码来执行此操作;不是特别复杂。