【问题标题】:@TestPropertySource and UTF-8 support in properties files属性文件中的 @TestPropertySource 和 UTF-8 支持
【发布时间】:2016-08-05 12:42:20
【问题描述】:
我正在为我的 Spring 应用程序进行集成测试,我希望能够使用 UTF-8 编码读取测试类中的属性文件。
现在,如果我想在我的属性中使用 'ä' 字符,我需要将它作为 U\00E4 放入我的属性文件中,因为默认情况下,属性文件是使用 ISO-8859-1 读取的。
如何配置我的测试应用程序上下文以读取 UTF-8 编码的属性文件?
【问题讨论】:
标签:
java
spring
encoding
integration-testing
spring-test
【解决方案1】:
1.从 UTF-8 文件生成 .properties:
在构建基础结构中,如 maven,可以使用过滤器复制 .properties 文件,该过滤器将构建目录中的 UTF-8 源转义为 ISO-8859-1:将 ĉ 转换为 \u0109。
它的优点是不使用非标准特性,可以使用ResourceBundle。
2.一个好的属性编辑器:
先前解决方案的缺点是不再可以使用属性编辑器(并排使用不同的语言),这是次要的,因为好的属性编辑器会在后台显示 Unicode 字符和 u-escapes。因此,当使用 属性编辑器 时,您无需执行任何操作并将文件保留在 ISO-8859-1 中。
3.不是 ResourceBundle 而是属性:
但是类 Properties 可以加载 UTF-8。那么不应该使用 ResourceBundle。
在 Spring 中,这意味着不要使用 ResourceBundleMessageSource,而是使用 ReloadableResourceBundleMessageSource。
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value=".../test/classes/..."/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="fileEncodings" value="UTF-8"/>
</bean>
(顺便说一句:ä 或 \u00E4 是一个 ISO-8859-1 字符,当编辑器设置为 ISO-8859-1 时不需要 u 转义。所以尝试使用希腊语、西里尔语进行测试之类的。)