1

在 ajax 调用的请求中获取字符串时,我遇到了问题。字符串有单词,例如“Ñoño”,但是当我使用以下方法读取参数时:

String parameter = request.getParameter("param");

结果我有奇怪的字符

所以我添加了下一个代码

byte [] parameterByte= parameter.getBytes();        
parameter = new String(parameterByte,"UTF-8");

结果,我得到了假设的大部分字符,除了Ñ。为什么我对这个角色有问题?任何想法?

问候。

4

2 回答 2

2

我解决了这个问题:

byte [] parameterByte= parameter.getBytes("ISO-8859-15");        
parameter = new String(parameterByte,"UTF-8");

问题是,为什么我必须这样做?我的环境/代码有什么问题导致这个问题?任何想法?

于 2013-05-02T18:30:48.520 回答
1

在这种特殊情况下,您需要在两个地方控制编码:

  1. 发起表单提交和/或 ajax 调用的页面的 HTTP 响应编码需要设置为 UTF-8。网络浏览器将使用完全相同的编码来编码传出请求参数。您不清楚您使用的是哪种视图技术,但作为 Java EE 当前的默认视图技术 Facelets,已经隐式使用 UTF-8,我假设您仍在使用旧版 JSP。在这种情况下,您需要通过以下任一方式设置它

    <%@page pageEncoding="UTF-8"%>
    

    在每个 JSP 之上,或者通过

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

    web.xml应用程序范围内应用它。

  2. servletcontainer 用于解析和解码传入请求参数的 HTTP 请求编码需要设置为 UTF-8。同样,您不清楚您使用的是哪种 HTTP 请求方法。在 POST 的情况下,在调用任何(隐式)访问请求正文的方法之前,这将是以下调用,例如getParameter().

    request.setCharacterEncoding("UTF-8");
    

    此调用的最佳位置映射到/*. 但是,在 GET 的情况下(当参数在请求 URL 而不是请求正文中时),无法以编程方式对其进行控制。您需要在 servletcontainer 端配置它。同样,您不清楚您正在使用哪个 servletcontainer。根据您之前提出的问题,我看到您正在使用 Tomcat 或至少熟悉它。在这种情况下,您需要打开其/conf/server.xml文件并编辑<Connector>元素以添加 URI 编码:

    <Connector ... URIEncoding="UTF-8" />
    

可能需要配置的第三个地方是您正在编写/存储/显示此数据的源,例如System.out.println()控制台或数据库。但是您自己的答案意味着这已经正确设置。

也可以看看:

于 2013-05-02T18:38:31.060 回答