在 Freemarker 中打印 JP 字符

Printing JP chars in Freemarker

我正在尝试打印 JP 字符。我正在使用 java 8 和 freemarker 2.3.31。 我有以下代码,

output starts
${(("こんにちは世界")?right_pad(12,"-"))[0..*12]}
${(("こんにちは")?right_pad(12,"-"))[0..*12]}
output ends
output starts
${(("こんにちは世界")?right_pad(12))[0..*12]}*
${(("こんにちは")?right_pad(12))[0..*12]}*
output ends

以下是输出。为什么它没有在同一个地方结束。

output starts
こんにちは世界-----
こんにちは-------
output ends
output starts
こんにちは世界     *
こんにちは       *
output ends

我错过了什么?当我用英语做同样的事情时效果很好,两条线都在同一个地方开始和结束。我尝试将 <#ftl encoding="Shift_JIS"> 添加到我的 ftl file.But 中,但没有成功。有人可以帮忙吗。 TIA.

不是在同一个地方结束,因为日语字符的长度与 - 的长度不同。

解决方法是使用与日本汉字宽度相同且含义与破折号相同的日语字符。不知道有没有这样的字符(可能是U+30FB:

对于日语,您应该使用更宽的表意文字 space (U+3000) 而不是正常的 space。即?right_pad(12, '\x3000').

如果你需要一个同样宽的破折号,那就是 U+30FC,比如 ?right_pad(12, '\x30FC')

这些当然也可以直接输入,比如?right_pad(12, 'ー'),但在那种情况下要注意模板文件的编码。