未检测到Spring MessageSource属性文件的第一行

时间:2019-08-06 17:57:09

标签: java spring

我正在使用Spring 4,并使用MessageSource进行本地化。

我的xml文件具有:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
   <property name="basename" value="classpath:i18n/myfile"/> 
   <property name="defaultEncoding" value="UTF-8"/>
</bean>

其中一个本地化文件myfile_nl.properties具有:

prop1=abc
other1=o1
other2=o2
other3=o3

获取本地化字符串的Java代码为:

@Autowired
private MessageSource messageSource;

String localizedMsg = messageSource.getMessage("prop1", null, locale);

现在,我遇到未找到prop1的异常。 因此,我编辑了属性文件,以便稍后将prop1复制到文件中。

other1=o1
other2=o2
prop1=abc
other3=o3

现在检测到prop1。

为什么prop1在第一行时没有被检测到?

1 个答案:

答案 0 :(得分:1)

您的属性文件采用UTF-8,可能以BOM(Byte Order Mark)开头。

由于Java不执行BOM表,因此3-byte BOM被视为不可显示的BOM表字符,并成为第一行中列出的属性名称的一部分,这当然会使它不匹配

在文本编辑器中编辑文件,该文件可以保存文件而无需BOM。

Notepad ++是此类文本编辑器的示例。参见:Remove a BOM character in a file