如何为 Spring 消息本地化启用外文字符?

2023-12-31

消息加载正常,但外来字符未按预期呈现:

我的消息属性(messages_sv.properties)是

login.title=Logga in
login.username=Användarnamn
login.password=Lösenord

JSP 是

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="com.ses.admin.controller.ObjectName" %>
<!DOCTYPE html>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib prefix="pu" tagdir="/WEB-INF/tags/node" %>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    <title><fmt:message key="login.title"/></title>
    <fmt:message var="jqueryUrl" key="jquery.js.url"/>
    <script src="<c:url value='${jqueryUrl}'/>" type="text/javascript"></script>
    <fmt:message var="applicationJsUrl" key="application.js.url"/>
    <script src="<c:url value='${applicationJsUrl}'/>" type="text/javascript"></script>
    <link href="/css/style.css" rel="stylesheet" type="text/css">
    <link href="http://fonts.googleapis.com/css?family=Raleway:400,200" rel="stylesheet" type="text/css">
</head>
<body>

<div id="header">
    <div id="header-title"><img src="/images/logga.png">Account Administration</div>
</div>

           <div class="login">

               <hr />


                   <spring:url var="action" value="/admin/execute"/>
                   <form name='f' class="marg-left" id="inputForm" method="post" action="<c:url value='j_spring_security_check'/>" >

                   <h4 class="title"><spring:message code="login.title" /></h4>
                   <label>
                       <span><spring:message code="login.username" /></span>
                       <input type="text" name="j_username" />
                   </label>

                   <label>
                       <span><spring:message code="login.password" /></span>
                       <input type="password" name="j_password" />
                   </label>

                   <div class="buttons">
                       <button type="submit" ><spring:message code="login.title" /></button>
                       <button type="reset" ><spring:message code="login.reset" /></button>
                   </div>
                   </form>
           </div>
</body>
</html>

我的 XML 配置是

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

    <mvc:resources mapping="/images/**" location="/images/"/>
    <mvc:resources mapping="/css/**" location="/css/"/>

    <mvc:annotation-driven/>
    <context:annotation-config/>
<!--
    <bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource">
        <property name="basenames">
            <list>
                <value>messages</value>
                <value>errors</value>
                <value>urls</value>
            </list>
        </property>
    </bean>
-->
    <bean id="messageSource"
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

    <mvc:interceptors>
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            <property name="paramName" value="lang" />
        </bean>
    </mvc:interceptors>

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

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- one of the properties available; the maximum file size in bytes -->
        <property name="maxUploadSize" value="100000"/>
    </bean>

    <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>
    <bean id="jsonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
    <bean id="methodHandlerExceptionResolver"
          class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
        <property name="messageConverters">
            <list>
                <ref bean="stringHttpMessageConverter"/>
                <ref bean="jsonHttpMessageConverter"/>
            </list>
        </property>
    </bean>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <bean id="assetFactory" class="com.ses.service.asset.PdfAssetFactoryImpl">
        <constructor-arg ref="partyRepository"/>
        <constructor-arg ref="customerAccountRepository"/>
        <constructor-arg name="registrationTemplatePath" value="${SES_SERVICE_ASSET_FACTORY_REGISTRATION_TEMPLATE}"/>
    </bean>
</beans>

在我的 web.xml 中我得到了

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我知道我应该在任何地方都使用 UTF-8 那么我错过了什么?在呈现的 HTML 中,字符 ä 和 ö 无法正确呈现:

更新 131218 15:53 CET

但是,使用此属性文件会给出正确的结果。真的有必要以这种方式对 åäö 进行编码吗?

login.title=Logga in
login.username=Anv\u00e4ndarnamn
login.password=L\u00f6senord

更新 131218 20:40 CET

答案说我应该设置我所做的编码,我什至创建了可以验证编码的新文件,如果我然后更改为本机文本(åäö),它将不会给出正确的结果。我能得到正确结果的唯一方法是使用转义语法,这是不可取的。


属性文件必须采用 ISO-8859-1 进行编码。您不能简单地将属性文件编码为 UTF-8 并期望一切正常。你检查过你的编码吗?

属性文件有另一种基于 XML 的格式,该格式更加详细,但允许您使用 UTF-8,而无需丑陋的转义语法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Spring 消息本地化启用外文字符? 的相关文章

随机推荐

  • 添加文本到列表输出

    我需要对使用 Powershell 获取的文件列表进行格式化 添加文本 我可以简单地使用以下脚本来获取我的文件列表 Get ChildItem c path where Length eq 0 select name 这可以很好地返回文件名
  • 可以在 if 语句中使用 2 个或多个 OR 条件吗? [复制]

    这个问题在这里已经有答案了 在论坛上提问之前 我尝试自己测试一下 但我的简单代码来测试它似乎不起作用 include
  • perl 中不带参数的 split

    我是perl新手 我想知道这行代码是什么意思 q dummy d v split 我通过谷歌搜索 但我没有找到使用 split 不带参数的解释 这种用法与 while 块有关吗 完整的代码片段是 open T opt judgments d
  • 用于获取智能卡序列号的 APDU 命令

    如何使用 APDU 命令获取智能卡的序列号 我尝试使用 SCardGetAttrib 函数来查询它winscard dll不幸的是 我被告知使用 APDU 命令来执行此操作 因为没有标准方法来获取序列号 问题是我无法弄清楚我的智能卡是什么类
  • 从 Perl 或 Python 解析 Java 类

    我想要获取一个 java 文件 识别文件中的第一个类 并从该类中获取有关注释 方法和属性的信息 两种语言中是否有任何模块已经做到了这一点 我也可以构建一个简单的正则表达式来执行此操作 但我不知道如何在正则表达式中识别指示类 方法结束的大括号
  • 删除CSS @media打印规则而不修改CSS文件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我将引导 CSS 文件添加到我的页面 我不想修改 CSS 文件 当我尝试打印页面时 引导程序修改介质以打印样式并删除所有颜色属性 如何
  • Windows 10 Home 上的 Docker Desktop 3.2.2 崩溃,并显示错误“连接期间出错:此错误可能表明 docker 守护进程未运行”

    我正在运行的 docker 容器似乎在我的 macbook 上运行良好 但是当在我的 Windows 10 家用电脑上运行时 Docker 引擎将会崩溃 当我尝试使用 Docker CLI 时 它将无法连接并声称 docker 未运行 即使
  • 带有继承的 JPA ManyToOne 映射

    我有几个具有共同属性的实体 因此提取了共同参数 如下面的代码片段 MappedSuperclass public class BaseCustomerDemographicDetails Id GeneratedValue strategy
  • 如何使用 readline 建议带有制表符补全的文件?

    在 Bash shell 中 我可以使用制表符补全来使用建议文件和目录名称 我怎样才能用nodejs实现这一点readline http nodejs org api readline html readline readline crea
  • 作为 C 结构成员的函数指针

    我有一个如下的结构 其中有一个指向名为 length 的函数的指针 该函数将返回 chars 成员的长度 typedef struct pstring t char chars int length PString 我有一个函数可以从指向
  • 如何使用 putObject 将 base64 图像上传到 aws s3?

    我尝试使用 putObject 将 base64 png 图像文件发送到 AWS s3 我想知道有效载荷到底是什么 有效负载 哈希 base64Image 这是一个细节 img str replace data image png base
  • Osmdroid 和 Pinch

    我正在使用 osmdroid 3 0 8 开发一个应用程序 当我使用两根手指放大和缩小时 缩放从地图的中心开始 而不是从两根手指的中间开始 使用MapView setMultiTouchControls true 我试图实施捏 pinch
  • Ubuntu服务器上部署JavaFX不显示

    我正在 Netbeans 中的 Mac OS X 10 9 1 上使用 jdk1 7 0 51 开发 JavaFX 应用程序 我可以毫无问题地运行它 并且在干净的构建之后我还可以从 dist 文件夹启动 jar 现在我想将其部署在 64 位
  • 使用JS媒体查询改变ScrollMagic的triggerHook位置

    如何成功地重新加载滚动魔术代码并更改triggerHook位置 当我尝试使用下面的代码执行此操作时 它设置了 trigerHook 两次 因此屏幕上有两个 我的 ScrollMagic 代码如下 Scrollmagic gsap to mo
  • 为什么 GCC 允许通过右值引用进行捕获?

    该标准规定通过右值引用捕获应该是非法的 按右值引用捕获 https stackoverflow com a 3860676 1270003 但我有以下代码 include
  • 使用 Twitter4j Android 转发

    我正在尝试制作简单的应用程序 twitter 我使用 twitter4j 库 并且我得到了如何使用该库登录和发布 twitter 的很好的教程 我的应用程序显示时间线并有转发按钮 我的问题如何使用 twitter4j 库转发 您可以致电St
  • Spy++ 如何构造其进程列表?

    TL DR Spy 工具如何真正构建其进程列表 Stage 我们有一个 MFC 桌面应用程序 在 Windows XP 上运行 它挂起 不再对任何用户输入做出反应 它is然而 通过 alt tab 切换到它时会重新绘制 它确实收到WM SE
  • 如何复制复选框值并使单元格在 Google 表格中保持可编辑状态?

    我两天前发布了这个问题 但没有答案 这是我正在处理的文件副本的链接 基本上 我所做的是 effettivo 页面是 pianificazione 页面的副本 effettivo 中的所有单元格都从其相对位置复制其值 问题是 对于右侧的复选框
  • Liquibase - 不同数据库供应商的校验和不同

    当我尝试在 MSSQL 和 MySQL 上运行 Liquibase 校验和时 我遇到了问题 在我的 MSSQL 库中 我有一个带有此校验和的更改日志条目 3 cf2f5de7a1dcc738bbc185e25fbcf6c9 当我针对这个数据
  • 如何为 Spring 消息本地化启用外文字符?

    消息加载正常 但外来字符未按预期呈现 我的消息属性 messages sv properties 是 login title Logga in login username Anv ndarnamn login password L sen