在 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 字符串也支持这一点,所以这是一种方式。您也可以编写一些代码来执行此操作;不是特别复杂。
在我的 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 字符串也支持这一点,所以这是一种方式。您也可以编写一些代码来执行此操作;不是特别复杂。