当前位置: 首页 > 知识库问答 >
问题:

要求getParameter()在java servlet中未正确显示字符编码

李安歌
2023-03-14

我对java servlet文件中的UTF-8有一些问题。当我在URL中获得参数值时,我对UTF-8字符有一些问题。它不能正确显示日语字符。

Jsp标头已具有

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

我将连接器中的URIEncoding设置添加到服务器中的UTF-8。xml。

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

我在jsp中编写了如下代码。

<s:textfield key="txt_name" name="txt_name" id="txt_name"
maxlength="64"></s:textfield>

<a href="javascript:showModalWindow('PopUpFile!init.action?<%=Common.PASSWORD%>=<%=Common.encript(ID, Code)%>','',940,650);">
<s:property value="PopUp Link" />
</a>

<script>
    function showModalWindow(x_URL, x_ARG, x_WIDTH, x_HEIGHT) {
        var x_OPT = "dialogHeight: " + x_HEIGHT + "px; " + "dialogWidth: "
                + x_WIDTH + "px; "
                + "edge: Raised; center: Yes; resizable: Yes; status: Yes;";
        x_URL += "&name="+document.getElementById("txt_name").value;
        var retValue = window.showModalDialog(x_URL, x_ARG, x_OPT);
        if (retValue != null) {
            document.forms.frm.action = "ParentFile!getUser.action";
            document.forms.frm.submit();
        }
    }
</script>

然后,我在java servlet中编写了以下代码。

if(g_request.getParameter("name") != null){
    g_session.setAttribute(NAME, g_request.getParameter("name"));
}

我还使用请求进行了测试。setCharacterEncoding()方法,但它实际上不起作用。虽然我尝试了许多方法来回答其他人在stackoverflow中和servlet中的字符编码相关的问题,但直到我找到了解决问题的方法。

我能做些什么来正确显示字符编码?提前感谢。

共有3个答案

谭卜鹰
2023-03-14

我有类似的错误,并解决它使用Servlet过滤器,如果您使用的是Spring,只需将此定义添加到web。xml

<!-- CharacterEncodingFilter / UTF-8 -->
    <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>
            </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>
        </filter-mapping>

如果您不使用Spring,请编写一个servlet过滤器,如:

protected void doFilterInternal(HttpServletRequest request,
            HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        //Set character encoding as UTF-8
        request.setCharacterEncoding("UTF-8");
        filterChain.doFilter(request, response);
    }
滕渝
2023-03-14

您是否使用系统测试输出。出来println?如果是这样,则可能是未针对UTF-8进行配置。

请参见:无法将特殊字符(UTF-8)从JSP发送到Servlet:显示问号

还要确保运行请求。读取参数前设置字符编码(“UTF-8”)。

茹正祥
2023-03-14

大多数服务器,包括Apache Tomcat服务器,默认情况下都配置为使用ISO-8859-1进行参数编码。我认为除非你有一个私有的专用服务器实例,否则你不会改变这一点。所以,程序员的技术是手动编码/解码这些参数。因为你使用的是javascript,所以有编码URI()编码URIComponent()内置函数。请参阅如何在JavaScript中编码URL。代码应该会改变

x_URL += "&name="+encodeURI(document.getElementById("txt_name").value);

在Java中,使用URL解码器将参数解码回来。

java.net.URLDecoder.decode(((String[])request.getParameterMap().get("name"))[0], "UTF-8"));

注意,如果您使用的是Struts2 dispatcher结果类型,则不需要解码查询字符串中的参数。这些参数通过UrlHelper进行解析。

然而,我不记得我什么时候解码这些参数在Struts2中自动解码。

通常,您应该知道,如果在URL中传递参数,则这些参数应该是URL编码的。如果您提交表单,则无需提交,因为表单是x-www-form-urlencoded,请参阅17.13.4表单内容类型。

 类似资料:
  • 我有一个缓冲区与字符编码在Windows 1252。然而,当我用适当的编码创建一个新的字符串时,而不是预期的结果,我经常会得到询问标记,例如。 因此,系统应在其上方显示带“^”的“u”字符。而是显示“?”。 任何想法?

  • 问题内容: 这是SQL查询: 当我在Microsoft SQL Server Management Studio中运行此查询时,得到以下信息: 问题:我是否需要在SQL查询中进行任何更改以获取婕㈠瓧的结果,还是代码页等问题? 问题答案: 变量由表示,因此它将是 现在,输出将保持原样。运行以上代码。

  • 通过单击Experiment Parameters选项卡中的一个按钮(参见下面的屏幕截图),我创建并运行一个“PreviewAction”,它创建了一个新的选项卡,并用必要的组件填充它。下面是的代码。编辑:我还发布了一个自包含的最小版本,它模拟了真实项目中的条件,并展示了相同的行为。 这里至少存在两个问题: (或)根本不呈现 没有框架本身那么宽,我不知道为什么 我在挥杆方面不是很好,所以我可能错过

  • 问题内容: 我已经开发了一个小应用程序来跟踪我的日常工作活动,该工具包含两个类: 执行者 UIProgress 我的目标是创建一个ProgressBar来更新执行状态,使用的逻辑如下所示, 根据Executor类中定义的executeTask(),我创建了UIProgress对象。 UIProgress类扩展了JFrame。创建一个面板,其中包含带有一个图像的标签和进度条。我已经在此类中定义了一个

  • 我开发了一个小应用程序来跟踪我的日常工作活动,该工具包含两个类: 遗嘱执行人 我的目标是创建一个更新执行状态的ProgressBar,下面给出了使用的逻辑, 从Exector类中定义的执行任务()中,我创建了UIProgress对象。 UIProgress类扩展了JFrame。创建一个包含带有一个图像和进度条的标签的面板。我在这个类中定义了一个方法updateProgress,它设置了进度条的值。

  • 问题内容: 我有一个使用ncurses用C编写的程序。它让用户输入并显示它。如果用户输入utf8字符,它将无法正确显示。 我将输入的字符用户保存到文件中。而且我直接在Shell中将此文件正确显示。 我搜索了stackoverflow和google,并尝试了几种方法(例如与ncursesw链接)显示不正确。 我: 可以正确显示用户输入的内容。 如何使ncurses正确显示UTF-8字符? 使用ncu