zoukankan      html  css  js  c++  java
  • 如何解决WebService参数传递中文乱码问题

    1,问题由来

            我的主要工作是负责统一适配平台这块,主要任务是提供给客户统一的调用接口,客户使用这个接口可以通过我们再调不同厂家的接口。主要流程如下:

            image

           现在客户那边传来的请求报文里面包含中文,使用webservice发送一般是用UTF-8,但是客户那边传来的请求的格式肯定不是的,不然也不会出现中文乱码:
           image

    2,解决之法

          在北向处理的流程中,在接收到客户传来的报文的时候进行编码转换。加上下面两个方法,在得到客户请求报文时只需调用第一个方法转换一下即可。

        //中文字符处理
        public String charSetConvert(String xmlRequest){
            String charSet = NeopServerImpl.getEncoding(xmlRequest);
            try {
                byte[] b = xmlRequest.getBytes(charSet);
                xmlRequest = new String(b, "UTF-8");
            } catch (Exception e) {
                logger.error("输入的内容不属于常见的编码格式,请再仔细核实", e);
            }
            return xmlRequest;
            
        }
        public static String getEncoding(String str) {
            String encode = "GB2312";
            try {
                if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GB2312
                    String s = encode;
                    return s; // 是的话,返回GB2312,以下代码同理
                }
            } catch (Exception e) {
                logger.error("getEncoding异常---GB2312", e);
            }
            encode = "ISO-8859-1";
            try {
                if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是ISO-8859-1
                    String s1 = encode;
                    return s1;
                }
            } catch (Exception e) {
                logger.error("getEncoding异常---ISO-8859-1", e);
            }
            encode = "UTF-8";
            try {
                if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是UTF-8编码
                    String s2 = encode;
                    return s2;
                }
            } catch (Exception e) {
                logger.error("getEncoding异常---UTF-8", e);
            }
            encode = "GBK";
            try {
                if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GBK
                    String s3 = encode;
                    return s3;
                }
            } catch (Exception e) {
                logger.error("getEncoding异常---GBK", e);
            }
            return ""; // 到这一步,你就应该检查是不是其他编码啦
        }

    注:以上部分代码参考网上资源:http://zhidao.baidu.com/link?url=gXafoS7hIAKe8lcuUldTW9sQWa3C3VnLLbfid09lY2WYO8ypuM0yc5BFGKFY5vaPuaJBLi4Qkr5cDBe0_eWE0_

  • 相关阅读:
    MessageDigest简介
    深入入门正则表达式(java)
    JAVA 正则 Pattern 和 Matcher
    理解Servlet过滤器 (javax.servlet.Filter)
    Java 之 I/O 系列 01 ——基础
    finally块中的代码一定会执行吗?
    wait(), notify(),sleep详解
    Java 多线程——基础知识
    集合迭代时对集合进行修改抛ConcurrentModificationException 原因 以及解决方案
    深入理解ServletRequest与ServletResponse
  • 原文地址:https://www.cnblogs.com/yefengyu/p/5085243.html
Copyright © 2011-2022 走看看