JavaWEB 乱码总结
来源:互联网 发布:网络彩票重启时间 编辑:程序博客网 时间:2024/06/06 08:35
post 提交的参数乱码特别容易解决;麻烦的就是 get 方式提交的参数;
1) post 提交的参数
request.setCharacterEncoding("utf-8");response.setCharacterEncoding("text/html;charset=utf-8");2)get 提交
Map<String, String[]> parameterMap = request.getParameterMap();for (String parameterName : parameterMap.keySet()) { String[] values = parameterMap.get(parameterName); if (values != null) { for (int i = 0; i < values.length; i++) { try { // 处理get乱码 values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }}
实例代码1
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;/** * 通用解决 get 和 post乱码过滤器 */public class EncodingFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// 处理请求乱码HttpServletRequest httpServletRequest = (HttpServletRequest) request;HttpServletRequest myRequest = new MyRequest(httpServletRequest);// 处理响应乱码response.setContentType("text/html;charset=utf-8");chain.doFilter(myRequest, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}}// 自定义request对象class MyRequest extends HttpServletRequestWrapper {private HttpServletRequest request;private boolean hasEncode;public MyRequest(HttpServletRequest request) {super(request);// super必须写this.request = request;}// 对需要增强方法 进行覆盖@Overridepublic Map getParameterMap() {// 先获得请求方式String method = request.getMethod();if (method.equalsIgnoreCase("post")) {// post请求try {// 处理post乱码request.setCharacterEncoding("utf-8");return request.getParameterMap();} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else if (method.equalsIgnoreCase("get")) {// get请求Map<String, String[]> parameterMap = request.getParameterMap();if (!hasEncode) { // 确保get手动编码逻辑只运行一次for (String parameterName : parameterMap.keySet()) {String[] values = parameterMap.get(parameterName);if (values != null) {for (int i = 0; i < values.length; i++) {try {// 处理get乱码values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}hasEncode = true;}return parameterMap;}return super.getParameterMap();}@Overridepublic String getParameter(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);if (values == null) {return null;}return values[0]; // 取回参数的第一个值}@Overridepublic String[] getParameterValues(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);return values;}}实例代码2
import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;/** * 字符编码 */public class FileEncoding implements Filter{private String encoding = null;@Overridepublic void destroy() {encoding = null;}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {if (encoding != null) {HttpServletRequest req = (HttpServletRequest) request;//have a answer about value[] & nameif (req.getMethod().equals("GET")) {String url = req.getRequestURL().toString();Enumeration<String> enumerations = req.getParameterNames();if (enumerations.hasMoreElements()) {url += "?";}while (enumerations.hasMoreElements()) {String name = (String) enumerations.nextElement();String[] values = req.getParameterValues(name);for (String value : values) {System.out.println("设置编码");value = new String(value.getBytes("ISO-8859-1"), encoding);url += name + "=" + value;}//answer - nextElement()if (enumerations.nextElement() != null && !enumerations.nextElement().equals("")) {url += "&";}}System.out.println("拦截器中拦截GET后处理后的URL: " + url);request = req;//System.out.println("name: " + new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8"));} else if (req.getMethod().equals("POST")) {request.setCharacterEncoding(encoding);response.setCharacterEncoding(encoding);}} else {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("text/html;charset=utf-8");}filterChain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {encoding = filterConfig.getInitParameter("encoding");}}
最后总结一下
post 提交没什么可说的
但是get 中却大有文章
第一种情况利用a标签传参数
<a href="url?name=中文"> 连接 </a>直接点击连接是没有乱码的
第二种情况是在浏览器URL地址栏中直接输入与a标签相同的中文参数 (至少访问过一次相同参数的a标签)
url?name=中文参数传递到后台没有乱码
第三种情况是在浏览器URL地址栏中直接输入与a标签相同的中文参数 (没有访问过相同参数的a标签)
url?name=中文参数传递到后台会出现乱码
第四种情况是在浏览器URL地址栏中直接输入没有在a标签中出现过的中文参数
url?name=其他中文参数参数传递到后台会出现中文乱码
0 0
- javaWeb乱码解决方案总结
- JavaWEB 乱码总结
- javaweb中文乱码问题总结
- javaweb中文乱码问题总结
- JavaWeb 提交中文数据乱码问题总结
- javaweb乱码
- javaweb乱码
- 去哪网实习总结:JavaWeb中文传参乱码问题的解决(JavaWeb)
- JavaWeb总结
- javaweb总结
- javaweb总结
- JavaWeb总结
- Javaweb总结
- javaweb乱码以及ajax乱码
- javaweb乱码以及ajax乱码
- JavaWeb 乱码的解决方案
- JavaWeb中文乱码处理
- javaweb中的乱码问题
- 日志分析工具Splunk破解
- Animations的使用方法
- 摩托车化油器的维修与调整
- 英语也就这么回事
- 只要7步,就能将任何魔方6面还原(留着以后教孩子玩
- JavaWEB 乱码总结
- [转] 计算方法太牛!
- Common通用函数,包含大量常用处理函数的集合
- 关于莫言Noble视频
- 10来节课补完初中,高中英语所有语法!
- 西部之旅之------相机的选择
- 【转】李承鹏 | 某江某河某长征
- 十分珍贵的稀有照片,你转了我会心疼
- 春运史诗级巨献《又见春运》震撼来袭!笑哭我了。。。