You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring I18n中文、印地文显示问号问题求助

解决Spring I18n中文/印地文字符显示为问号的问题

嘿,我之前在做Spring国际化的时候也踩过这个字符显示成问号的坑!结合你给出的dispatcher-servlet.xml配置,咱们可以从这几个常见方向排查解决:

1. 先确认国际化资源文件的编码格式

你已经在messageSource里设置了defaultEncoding="UTF-8",但如果你的.properties文件本身不是以UTF-8编码保存的,这配置就起不到作用。

  • 打开你的messages_zh_CN.propertiesmessages_hi_IN.properties等文件,检查它们的保存编码(比如IDEA右下角会显示当前文件编码,若不是UTF-8,直接转换成UTF-8即可)。
  • 小提示:如果你的资源文件里是Unicode转义字符(比如\u4F60\u597D这种形式),其实也能正常显示,但如果是直接写中文/印地语字符,必须保证文件编码是UTF-8。

2. 给MessageSource显式指定文件编码

有时候仅靠defaultEncoding可能不够,你可以给ReloadableResourceBundleMessageSource添加fileEncodings属性,明确指定每个资源文件的编码:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="defaultEncoding" value="UTF-8" />
    <!-- 为各个语言资源文件指定UTF-8编码 -->
    <property name="fileEncodings">
        <props>
            <prop key="classpath:messages">UTF-8</prop>
            <prop key="classpath:messages_zh_CN">UTF-8</prop>
            <prop key="classpath:messages_hi_IN">UTF-8</prop>
        </props>
    </property>
    <property name="useCodeAsDefaultMessage" value="true" />
</bean>

3. 确保视图层的编码正确

如果你的项目用JSP作为视图,一定要在JSP页面顶部设置正确的编码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

另外,Spring的视图解析器也要配置编码,比如InternalResourceViewResolver

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
    <property name="contentType" value="text/html;charset=UTF-8" />
</bean>

4. 检查Web容器的编码配置

如果你用的是Tomcat,需要修改server.xml里的Connector节点,添加编码相关配置,避免请求/响应过程中字符被转码:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8"
           useBodyEncodingForURI="true"/>

5. 补全LocaleResolver的配置

你提供的配置里localeResolver没写完,确保它的配置是正确的,比如用SessionLocaleResolver,并搭配LocaleChangeInterceptor来支持语言切换:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="en" />
</bean>

<!-- 添加拦截器,允许通过?lang=zh_CN这样的参数切换语言 -->
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>

建议先从资源文件编码开始排查,这是最常见的问题根源,然后依次检查其他配置,应该就能解决字符显示为问号的问题了!

内容的提问来源于stack exchange,提问作者kavya

火山引擎 最新活动