使用 utf-8 从文件读取 XML

Read XML from file with utf-8

我有一个包含 spring bean 的 mule 流,它读取以 utf-8 编码的静态 XML 文件。但是它弄乱了所有非英语字符。 bean定义如下:

     <spring:bean id="LoadFile" name="Bean" class="java.lang.String">
    <spring:constructor-arg>
       <spring:bean id="Test" name="org.springframework.util.FileCopyUtils" class="org.springframework.util.FileCopyUtils" factory-method="copyToByteArray">
            <spring:constructor-arg type="java.io.InputStream" value="classpath:Settings.xml"/>
        </spring:bean> 
    </spring:constructor-arg>
</spring:bean> 
    </spring:beans>

如果我使用自己的代码读取同一个文件,例如:

        InputStream in = this.getClass().getClassLoader()
            .getResourceAsStream(name);

它是 utf-8 并且有效。如何定义 springbean 以关心编码?

此致

为字符串 bean 添加 UTF-8 字符集构造函数 arg

<spring:bean id="LoadFile" name="Bean" class="java.lang.String">
    <spring:constructor-arg index="0">
       <spring:bean id="Test" name="org.springframework.util.FileCopyUtils" class="org.springframework.util.FileCopyUtils" factory-method="copyToByteArray">
            <spring:constructor-arg type="java.io.InputStream" value="classpath:Settings.xml"/>
        </spring:bean> 
    </spring:constructor-arg>

    <spring:constructor-arg index="1" value="UTF-8">
 </spring:bean>

Java相当于

new String(byte_array, "UTF-8")

这是因为您正在通过调用采用 byte[] 的构造函数来创建 String,这将使用系统的默认字符编码解释字节,这可能不是 UTF- 8.

指定字符编码,使用String的右构造函数。这应该有效(我还没有测试过):

<spring:bean id="LoadFile" name="Bean" class="java.lang.String">
    <spring:constructor-arg>
        <spring:bean id="Test" name="org.springframework.util.FileCopyUtils" class="org.springframework.util.FileCopyUtils" factory-method="copyToByteArray">
            <spring:constructor-arg type="java.io.InputStream" value="classpath:Settings.xml"/>
        </spring:bean> 
    </spring:constructor-arg>
    <spring:constructor-arg value="UTF-8"/>
</spring:bean>