Java编码问题Ñ

时间:2013-04-30 22:29:08

标签: java ajax urlencode

在ajax调用请求中获取String时出现问题。 字符串有单词,例如“Ñoño”,但是当我使用:

读取参数时
String parameter = request.getParameter("param");

结果我有奇怪的字符

所以我添加了下一个代码

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

结果我得到了所谓的大部分角色,除了Ñ。为什么我遇到这个角色的问题?有什么想法吗?

Regars。

2 个答案:

答案 0 :(得分:1)

我解决了这个问题:

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

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

答案 1 :(得分:1)

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

  1. 启动表单提交和/或ajax调用的页面的HTTP响应编码需要设置为UTF-8。 webbrowser将使用完全相同的编码来编码传出请求参数。你不清楚你正在使用哪种视图技术,但作为Facelets,Java EE目前的默认视图技术,已经隐式使用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");
    

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

    <Connector ... URIEncoding="UTF-8" />
    
  3. 可能需要配置的第三个位置是您正在编写/存储/显示此数据的源,例如System.out.println()控制台或数据库。但你自己的回答暗示这已经正确设定了。

    另见: