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("=", "");
        }
时间: 2024-10-10 11:55:24

discuz_ucenter_api_for_java的中文问题的相关文章

Python cmd 中文显示乱码

方法一:# -*- coding:utf-8 -*- content = "我是中文" content_unicode = content.decode("utf-8") content_gbk = content_unicode.encode("gbk") print content_gbk 方法二: 解决非常简单 先引入import sys 再加一句:type=sys.getfilesystemencoding() 然后在输出乱码的数据的时候

大写中文数字-財务

壹.贰.叁.肆.伍.陆.柒.捌.玖.拾.佰.仟.万.亿.元(圆).角.分.零.整.这是大家常常要填写的大写数字,问什么要用大写数字呢?想必非常多人都不是非常清楚! 先看看下面两个有关大写数字的表格: 1.数码与大.小写数字的对比表: 数码 小写数字 大写数字 0 ○ 零 1 一 壹 2 二 贰 3 三 叁/參 4 四 肆 5 五 伍 6 六 陆 7 七 柒 8 八 捌 9 九 玖 2.进位数码与大.小写数字的对比表 数码 小写数字 大写数字 10 十 拾 20 二十 廿 30 三十 卅 100

Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Query OK, 1 row affected, 1 warning (0.00 sec)    表明出现错误,没有插入成功,然后执行select * from 表名   就会出现如下的问题:显示的表中出现乱码或者问号. 如图: 解决方案: 首先重新打开一个终端窗口(方便操作),进入root用户模式 执行

Extjs 4.2 设置buttontext为中文

可以在Ext.QuickTips.init();后加入如下代码: Ext.MessageBox.buttonText = { ok : "确定", cancel : "取消", yes : "是", no : "否" }; Extjs 4.2 设置buttontext为中文,布布扣,bubuko.com

苹果手机输入中文不会触发onkeyup事件

今天同事的项目有这个问题,用我的安卓手机输入中文是ok的,但是苹果手机就不行 使用keyup事件检测文本框内容:  $('#keyup_i').bind('keyup', function(){         $('#keyup_s').text($(this).val());  } 本来是上面这种处理方式,现在改成下面这样就ok了 使用oninput以及onpropertychange事件检测文本框内容:  //先判断浏览器是不是万恶的IE,没办法,写的东西也有IE使用者       var

iOS 限制输入框不能输入中文

开发中遇到这个问题,想着还是总结下,刚开始只是限制UITextField的键盘为 UIKeyboardTypeASCIICapable,可是当用户切换了中文键盘后依然没解决问题,于是我给输入框加了监听事件,获取输入框最新的输入内容,检测输入的内容中是否含有中文,如果有中文就替换成空字符串,具体实现如下: infoView.userTF.keyboardType = UIKeyboardTypeASCIICapable; //监听输入内容 [[NSNotificationCenter defaul

Ubuntu 16.04 GNOME下解决Sublime Text3中文输入(ibus)(转)

解决方法: 1.进入Sublime Text3插件管理文件夹 cd ~/.config/sublime-text-3/Packages 2.获取InputHelper插件 git clone https://github.com/xgenvn/InputHelper.git 3.如果发现在Sublime Text3中无法使用Ctrl+Shift+Z调出输入框,请检查是否安装pygtk sudo apt-get install python-gtk2-dev 4.每次输入中文时都要输入Ctrl+S

linux中文显示设置

Linux中文显示设置 1.1 查看当前使用的字符集 1.1.1 查看系统当前使用的字符集(语言) LANG echo $LANGen_US.UTF-8 1.1.2修改系统的字符集(语言) LANG=zh_CN.UTF-8 LANG PS1  linux环境变量(在linux任何一个角落中都可以使用)    export LANG=zh_CN.UTF-8 1.1.3 修改环境变量的时候 前面加上 export  echo $LANGzh_CN.UTF-8  1.1.4查看系统当前使用的字符集(语

使用JAVA解压加密的中文ZIP压缩包

近来项目中需要对ZIP压缩包解压,然后将解压后的内容存放到指定的目录下. 该压缩包的特性: 使用标准的zip压缩格式(压缩算法没有深入探究) 压缩包中带有目录并且目录名称是中文 压缩时加了密码 因为jre中自带的java.util.zip.*包不支持中文及加密压缩,所以选择使用zip4j包. 下面是解压的实现代码: 1 public class UnZip { 2 private final int BUFF_SIZE = 4096; 3 4 /* 5 获取ZIP文件中的文件名和目录名 6 */