web-dev-qa-db-ja.com

VelocityテンプレートはUTF-8で失敗するようです

次の内容のベロシティテンプレートを使用しようとしています。

Sübjäct $item

2つのUnicode文字の変換を除いて、すべて正常に機能します。コマンドラインに出力される結果文字列は次のようになります。

Sübjäct foo

私はvelocityのWebサイトとWebでこの問題を検索し、さまざまなフォントエンコーディングオプションを考え出し、それをコードに追加しました。しかし、これらは役に立ちません。これは実際のコードです:

velocity.setProperty("file.resource.loader.path", absPath);
velocity.setProperty("input.encoding", "UTF-8");
velocity.setProperty("output.encoding", "UTF-8");

Template t = velocity.getTemplate("subject.vm");
t.setEncoding("UTF-8");

StringWriter sw = new StringWriter();

t.merge(null, sw);       
System.out.println(sw.getBuffer());

この問題を修正するにはどうすればよいですか?

18
steve

この構文を使用してみましたか?

Template template = Velocity.getTemplate("subject.vm", "UTF-8");

それはそれのように見えますすべき正しいことをしなさい。

37
Jon Skeet

VelocityEngineをJavaMailSenderImplクラスと一緒に使用している場合は、defaultEncodingプロパティを設定することを忘れないでください。また、前述のように、VelocityEngineクラスのinput.encodingプロパティとoutput.encodingプロパティを構成してみてください。以下に例を残します。

構成ファイル

<bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="Java:jboss/example/jndiName"/>
    </bean>
<bean id="javaMailSenderImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="session" ref="smtpSession"/>
        <property name="defaultEncoding" ref="UTF-8"/>
</bean>

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="velocityProperties">
            <props>
                <prop key="input.encoding">UTF-8</prop>
                <prop key="output.encoding">UTF-8</prop>
                <prop key="response.encoding">UTF-8</prop>
                <prop key="resource.loader">file</prop>
                <prop key="file.resource.loader.class">org.Apache.velocity.runtime.resource.loader.FileResourceLoader
                </prop>
                <prop key="file.resource.loader.path">${relative.path}/email-templates</prop>
                <prop key="file.resource.loader.cache">false</prop>                    
            </props>
        </property>
    </bean>
1
darkconeja

私の解決策:「-Dfile.encoding = UTF-8」をjvmオプションに追加します(引用符は含まれていません)。

私は上記の可能な解決策を試しましたが、どれも私にはうまくいきません。

ツイスト検索と探索を何日も行った後、velocitieのhtmlファイルのレンダリングで問題が発生したと思います。間違って表示されたテキストが実際にはGB2312エンコーディングであることがわかったため、ページがレンダリング(私は推測します)。

1
user5465377