2016-10-26 13 views
0

私は、utf-8でエンコードされた静的なXMLファイルを読み込むSpring Beanを使ってノーフローをしています。しかし、それはすべての英語以外の文字を混乱させます。 次のようにBeanが定義されていますutf-8でファイルからXMLを読む

 <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だと動作します。エンコーディングを気にするには、どうすればスプリングビーンを定義できますか?

よろしく

答えて

1

同等のJavaのString Beanの

<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> 

をUTF-8文字セットのコンストラクタの引数を追加します。 byte[]は、システムのデフォルトの文字エンコーディングを使用してバイトを解釈しますが、これはおそらく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> 
+0

答えと素敵な説明をありがとう、それは働いた! – elwis

1

あなたが取るコンストラクターを呼び出してStringを作成しているためです

new String(byte_array, "UTF-8") 
+0

お返事ありがとうございました! – elwis

関連する問題