zoukankan      html  css  js  c++  java
  • java web 中文乱码

    开发过程中,中文乱码的问题,一直都是一个老生常谈的问题困扰这开发人员。

    1. 通过后台解决

    public String youMethodName(HttpServletRequest req,...){
        String yourParam = req.getParameter("paramName");
        Matcher m = Pattern.compile("[u4e00-u9fa5]").matcher(yourParam);  
                    //如果没有发现中文,说明使用get方式传递了中文,需要使用下面的方法转换  
                    if (!m.find()) {  
                        programaName = this.tools.decodeUTF8FromIso88591(programaName);
                    }  
        public String decodeUTF8FromIso88591(String paramStr) {
                if (null == paramStr || paramStr.length() <= 0) {
                    return null;
                }
                try {
                    byte[] bytes = paramStr.getBytes("iso-8859-1");
                    paramStr = new String(bytes, "utf-8");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return paramStr;
            }
    }

    一般情况我们是可以通过上面的方法解决中文的乱码问题,但也有特殊情况


    2. 通过前台传递时解决

    将请求参数经过URI编码在传给后台.防止了乱码;

    var param = encodeURIComponent("yourParam");

    当再需要使用的时候在通过对应的解码对其解码展示;

    String param = encodeURIComponent(req.getParameter(param));

    如果将转码过后的值作为数据存储到数据库中,这样同时可以防止数据库的SQL注入;

    encodeURIComponent() URI编码

    是将字符串 经过URI编码,避免get方式到后台乱码

    name=中文字符

    传到后台会根据浏览器不同有不同处理

    tomcat server.xml中设置了编码 接收到的值也不一样

    URI编码不能过滤非法字符

    可以直接按F12在Console下面输入代码

    console.log(encodeURIComponent("!@#$%^&"));
    !%40%23%24%25%5E%26

    所以如果这里面有非法字符比如 &%¥# 这些 经过encodeURIComponent 也都传到后台了

  • 相关阅读:
    [985] 令牌放置
    [191] 位1的个数
    [637] 二叉树的层平均值
    大数据量时 Mysql LIMIT如何正确对其进行优化(转载)
    数据库中,表一sum得出一个值,赋给表二的某个字段,为null
    安装JDK提示: 该项不适于在指定状态下使用的错误
    hibernate中多对一问题
    JSONObject基本内容(三)
    JSONObject基本内容(二)
    JSONObject基本内容(一)
  • 原文地址:https://www.cnblogs.com/lvgo/p/13275880.html
Copyright © 2011-2022 走看看