zoukankan      html  css  js  c++  java
  • discuz_ucenter_api_for_java的中文问题

    我踩过的坑,希望你别掉进来。

    云服务需要和UCENTER做对接,一个php,一个Java,幸好有了discuz_ucenter_api_for_java,帮我解决了大部分问题,为什么是大部分问题,因为他没有解决中文登录,中文同步登录的问题,我对编码这块完全不懂,搞了一下午脑袋晕晕的,幸好公司的phper全力配合我。终于解决了这个问题,思路是什么:就是php和Java的字符串一个一个的对。直接说解决方法吧

    1:替换base64编码,

    作者不知道在哪找的一个base64的编码实现,我删除了使用了commons-codec库里面的base64实现。修改PHPFunctions这个类

        protected String base64_decode(String input){
            try {
                return new String(base64.decode(input), "iso8859-1");
            } catch (Exception e) {
                return e.getMessage();
            }
        }
    
        protected String base64_encode(String input){
            try {
                return new String(base64.encode(input.getBytes("iso-8859-1")));
                //return new String(base64.encode(input.getBytes("UTF-8")),"iso8859-1");
            } catch (Exception e) {
                return e.getMessage();
            }
        }

    为什么是iso-8859-1,这个我分析不是tomcat的问题,是ucenter使用了iso-8859-1,我看了ucenter的返回值,是个xml的字符串,编码是iso-8859-1.

    2: 实现中文登录的问题。修改两个地方:

    1:PHPFunctions类的urlencode方法

        protected String urlencode(String value){
            try {
                return URLEncoder.encode(value, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            return null;
        }

    2:Client的uc_fopen方法

    BufferedReader reader = new BufferedReader(new InputStreamReader(ins,"UTF-8"));

    3:实现中文的同步登录:

    修改Clent的uc_authcode方法。

            if($operation.equals("DECODE")) {
                String $result = $result1.substring(0, $result1.length());
                String temp=substr($result.toString(), 26);
                try {
                    temp=new String(temp.getBytes("iso8859-1"),"UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                if((Integer.parseInt(substr($result.toString(), 0, 10)) == 0 || Long.parseLong(substr($result.toString(), 0, 10)) - time() > 0) &&
                        substr($result.toString(), 10, 16).equals( substr(md5(temp+ $keyb), 0, 16))) {
                    return temp;
                } else {
                    return "";
                }
            } else {
                return $keyc+base64_encode($result1.toString()).replaceAll("=", "");
            }
  • 相关阅读:
    HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)
    HDU 5122 K.Bro Sorting(2014北京区域赛现场赛K题 模拟)
    HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)
    HDU 4793 Collision(2013长沙区域赛现场赛C题)
    HDU 4791 Alice's Print Service(2013长沙区域赛现场赛A题)
    HDU 4803 Poor Warehouse Keeper
    HDU HDU1558 Segment set(并查集+判断线段相交)
    HDU 1086You can Solve a Geometry Problem too(判断两条选段是否有交点)
    HDU 1392 Surround the Trees(凸包*计算几何)
    HDU 1174 爆头(计算几何)
  • 原文地址:https://www.cnblogs.com/gaoxing/p/4373937.html
Copyright © 2011-2022 走看看