Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Ñ的Java编码问题;_Java_Ajax_Urlencode - Fatal编程技术网

带有Ñ的Java编码问题;

带有Ñ的Java编码问题;,java,ajax,urlencode,Java,Ajax,Urlencode,我在ajax调用请求中获取字符串时遇到问题。 例如,字符串中有单词“ñoño”,但当我使用以下命令读取参数时: String parameter = request.getParameter("param"); 结果我有了奇怪的性格 所以我添加了下一个代码 byte [] parameterByte= parameter.getBytes(); parameter = new String(parameterByte,"UTF-8"); 结果,我得到了大部分的角色,除了那一个

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

String parameter = request.getParameter("param");
结果我有了奇怪的性格

所以我添加了下一个代码

byte [] parameterByte= parameter.getBytes();        
parameter = new String(parameterByte,"UTF-8");
结果,我得到了大部分的角色,除了那一个。为什么我对这个角色有问题?有什么想法吗


Regars.

我通过以下方式解决问题:

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

问题是,我为什么要这么做?我的环境/代码中有什么错误导致此问题?有什么想法吗

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

  • 启动表单提交和/或ajax调用的页面的HTTP响应编码需要设置为UTF-8。webbrowser将使用完全相同的编码对传出请求参数进行编码。您不清楚使用的是哪种视图技术,但是作为Facelets,JavaEE当前的默认视图技术,已经隐式地使用了UTF-8,我假设您仍然在使用遗留JSP。在这种情况下,您需要将其设置为

    
    
    在每个JSP的顶部,或者

    
    *.jsp
    UTF-8
    
    web.xml
    中,将其应用于整个应用程序

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

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

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

    另见:

    我敢打赌,您收到的HTTP请求的编码不正确。@duffymo我如何检查HTTP请求的编码?我会将浏览器中的区域设置设置为西班牙语,看看这是否有改进。检查。每次不指定编码时,都使用默认编码。请注意,这不是解决方案。这是一种变通/破解方法。“这也是一个相当丑陋和不可移植的东西。”巴卢斯完全同意!只是一个丑陋的解决办法。我将尝试应用您的建议,但应用程序确实很大,我有点担心这种更改会在旧的糟糕编程函数中产生新的bug。关于。-正如您所说:我使用的是Tomcat6,问题是使用方法GET,最后,我使用的是Struts1.3和JSP。
    request.setCharacterEncoding("UTF-8");