Spring MVC 和 HTML 表单的字符编码问题

问题描述 投票:0回答:3

我正在使用 spring mvc。我已经设置了一个具有两个简单文本输入的网络表单。在控制器上,我使用 @ModelAttribute 让 spring 从 Web 表单构建 bean。

当用户在这些文本字段中输入特殊字符(例如酒店之类的字符)时,问题就出现了,spring 不会将其读取为 utf-8,并且它们会变成通常的错误编码字符串。

我检查了 web.xml,有 utf-8 编码过滤器,所有页面都标记为 utf-8,并且浏览器正在发送正确的字符集标头。知道发生了什么事吗?

spring-mvc character-encoding forms http-post
3个回答
1
投票

您可能想检查一下: http://forum.springsource.org/showthread.php?81858-ResponseBody-and-UTF-8

缺点是,如果您使用带注释的方法,那么所使用的消息转换器具有默认字符集。您可以通过设置支持的媒体类型在 web.xml 中更改此设置。

但是,如果您的服务不喜欢该媒体类型,您可能会收到 406 错误。您可以创建自己的字符串消息转换器并设置默认编码,但是使用内置的 HttpStringMessageConverter 没有简单的方法。

或者,您可以将字符串重新编码为不同的字符集:

String newresponse = new String(responseString.getBytes("ISO-8859-1"), "UTF-8"); 

您可能还想在此处查看相关问题:如何让 UTF-8 在 Java Web 应用程序中工作?


0
投票

解决方案很简单,通过添加 Produce = "text/plain;charset=UTF-8" 来请求映射,您可以强制 spring mvc 对返回的文本进行编码。


0
投票

我在使用 @ModelAttribute 获取模型作为控制器方法的参数时遇到了类似的问题。然后我在 chatgpt 的帮助下找到了一个简单的解决方案。

只需将此设置添加到您的 web.xml 文件即可。

如果你想将unicode从jsp传递到java那么:

<filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value> <!-- Set the desired character encoding -->
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern> <!-- Apply the filter to all URLs -->
    </filter-mapping>

如果你想从java传递unicode字符到jsp:

<jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
    </jsp-config>

encodingFilter 强制将字符编码为 UTF-8(您可以将其更改为任何其他编码)。 jsp-config 将页面编码应用于所有 jsp 页面,而不是在所有页面中单独指定页面编码。它帮助jsp正确渲染unicode字符。

© www.soinside.com 2019 - 2024. All rights reserved.