春季项目不显示孟加拉语字体

时间:2015-08-13 11:53:58

标签: java css spring maven spring-mvc

在我的项目中,我想在bengali中显示一条消息。所以,我有:

的style.css

    @font-face {
      font-family: 'Siyam Rupali';
      src: url('../fonts/SiyamRupali.eot?version=1.070');
      src: local('Siyam Rupali'),
       url('../fonts/SiyamRupali.woff?version=1.070') format('woff'),     
         url('../fonts/SiyamRupali.ttf?version=1.070') format('truetype');
      font-style: normal;

    }

.tabs {
    position: relative;
    margin: 10px auto;
    font-family: 'Siyam Rupali';

}

我在WEB-INF文件夹上有“message.properties”。 message.properties是:

tab1.name = \u09AC\u09BE\u0982\u09B2\u09BE

我有 spring-servlet.xml

<bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="/WEB-INF/messages" />
         <property name="defaultEncoding" value="UTF-8" />

    </bean>

我正在使用maven,所以,在 Pom.xml 我有:

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

在我的jsp页面中,我有:

    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<section class="tabs">
    <spring:message code="tab1.name"/>
</ssection>

但是消息显示为question mark..(????) ..为什么??

1 个答案:

答案 0 :(得分:3)

它有点晚了,但我也遇到了同样的问题,所以我想分享一下我是如何解决这个问题的,希望它能帮助将来的某个人。此外,这对于Bangla字体也不是特别的,对于任何其他unicode字体也是如此。

首先,你的css看起来很好。这是我添加字体的方式。这是我的.css文件,其中包含字体:

@font-face {
    font-family: 'Siyam Rupali';

    src: url('../fonts/SiyamRupali.eot');

    src: local('Siyam Rupali'),
        url('../fonts/SiyamRupali.eot')     format('embedded-opentype'),
        url('../fonts/SiyamRupali.woff')    format('woff'),
        url('../fonts/SiyamRupali.ttf')     format('truetype');

    font-style: normal;
}

body {
    font-family: 'Siyam Rupali', Fallback, sans-serif;
}

您仍然可以在标签上使用特定的字体系列而不会出现任何问题。

接下来是您的资源文件。这是IDE的一个众所周知的问题,它们通常不会创建具有必要编码的文件(大部分时间以ASCII格式)。在记事本中打开消息属性文件并将其保存为UTF-8。同样从IDE的文件编码设置中,确保属性文件为UTF-8。 See this picture

接下来是配置,在你的html(或模板页面)中添加元属性charset =&#39; UTF-8&#39;。

在你的spring配置中,(我使用的是基于java的配置和Thymeleaf模板引擎,xml配置和jsp + jstl视图解析器配置将类似于我所知)

@Configuration
public class ThymeleafConfig {

    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource resource = new ReloadableResourceBundleMessageSource();
        resource.setBasename("classpath:i18n/messages");
        resource.setDefaultEncoding("UTF-8");
        return resource;
    }

    @Bean
    public ServletContextTemplateResolver templateResolver() {
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
        resolver.setPrefix("/WEB-INF/html/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setOrder(1);
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    @Bean
    public ThymeleafViewResolver thymeleafViewResolver() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }
}

非常重要的是要注意,您的视图解析程序bean (在我的情况下,ThymeleafViewResolver)必须将字符编码设置为UTF-8和消息源,请使用 ReloadableResourceBundleMessageSource 并将字符编码指定为UTF-8。或者说实话,在任何地方都可以设置UTF-8。

希望这有帮助。