在ajax调用请求中获取String时出现问题。 字符串有单词,例如“Ñoño”,但是当我使用:
读取参数时String parameter = request.getParameter("param");
结果我有奇怪的字符
所以我添加了下一个代码
byte [] parameterByte= parameter.getBytes();
parameter = new String(parameterByte,"UTF-8");
结果我得到了所谓的大部分角色,除了Ñ。为什么我遇到这个角色的问题?有什么想法吗?
Regars。
答案 0 :(得分:1)
我解决了这个问题:
byte [] parameterByte= parameter.getBytes("ISO-8859-15");
parameter = new String(parameterByte,"UTF-8");
问题是,为什么我必须这样做?导致这个问题的环境/代码出了什么问题?任何的想法?
答案 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
中在整个应用范围内应用。
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" />
可能需要配置的第三个位置是您正在编写/存储/显示此数据的源,例如System.out.println()
控制台或数据库。但你自己的回答暗示这已经正确设定了。