次の内容のベロシティテンプレートを使用しようとしています。
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());
この問題を修正するにはどうすればよいですか?
この構文を使用してみましたか?
Template template = Velocity.getTemplate("subject.vm", "UTF-8");
それはそれのように見えますすべき正しいことをしなさい。
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>
私の解決策:「-Dfile.encoding = UTF-8」をjvmオプションに追加します(引用符は含まれていません)。
私は上記の可能な解決策を試しましたが、どれも私にはうまくいきません。
ツイスト検索と探索を何日も行った後、velocitieのhtmlファイルのレンダリングで問題が発生したと思います。間違って表示されたテキストが実際にはGB2312エンコーディングであることがわかったため、ページがレンダリング(私は推測します)。