• 反腐败国际合作"朋友圈"又大了! 2019-07-13
  • 前线 从一面“魔镜” 看苏宁科技集团智能化发展战略 2019-07-13
  • 身份证被盗产生不良记录 网络虚拟账号权属纠纷如何避免 2019-07-07
  • 的确,呆子七窍通了栁窍。[哈哈] 2019-06-20
  • 强国博客首页整合公告 2019-06-08
  • 西海都市报数字报刊平台 2019-05-27
  • 美国反拥枪的孩子很受伤 2019-05-25
  • C罗戴帽单骑救主 葡萄牙33战平西班牙 2019-05-25
  • 证监会去年对外公开监管信息14560条 2019-05-16
  • 中山八路总站调整12公交线 2019-05-16
  • 谢春涛:深刻把握“中国特色社会主义进入新时代”的重大意义 2019-05-09
  • 湖南一博士生举报水利局领导受贿 遭到冒牌纪委约谈 2019-05-09
  • 西安地铁唐风诗韵文化专列将于6月18日首发 2019-04-30
  • 铜梁区旧县街道:全面提升执行力 推动工作落地见效 2019-04-30
  • 上海电影节女性影人大放异彩 中生代女演员不用焦虑 2019-04-29
  • JAVA GB2312转成UTF8变成???

    Bless_you 发布于 07/10 16:02
    阅读 290
    收藏 0

    广东十一选五推荐号 www.qhysp.com 问题是这样的:

    我收到一个GB2312格式的中文字符串,但是是乱码

    String item_name1= "(????????: 1601)???_100M_?????Ч_????7??_2??????Ч_????????";

    这是日志打印出来的,我直接复制出来了。

    然后想转成UTF8的正常显示的中文,发现怎么转都转不了。都是一串????字符

    String s1 = new String(item_name1.getBytes("GB2312"),"UTF-8");
    System.out.println("s1 = " + s1);
    
    String s2 = new String(item_name1.getBytes("ISO8859_1"),"UTF-8");
    System.out.println("s2 = " + s2);
    
    String s3 = new String(item_name1.getBytes("ISO8859_1"), "GBK");
    System.out.println("s3 = " + s3);
    
    String s4 = new String(item_name1.getBytes("utf-8"));
    System.out.println("s4 = " + s4);

    结果:

    s1 = (????????: 1601)???_100M_???????_????7??_2????????_????????
    s2 = (????????: 1601)???_100M_??????_????7??_2???????_????????
    s3 = (????????: 1601)???_100M_??????_????7??_2???????_????????
    s4 = (????????: 1601)???_100M_?????Ч_????7??_2??????Ч_????????

    这个是再PAYPAL checkout v1 快捷支付IPN回调遇到的问题。

    具体流程就是,我发送了一个UTF8的中文字符串至PAYPAL,然后PAYPAL回调的时候返回了一个GB2312的中文字符串给我,我收的是一串乱码,想转成UTF8格式的中文。

    求助好心人,谢谢。

    加载中
    0
    阿信sxq
    阿信sxq

    其实不是你在读取出这个数据之后进行转码,而是你在读取到这个数据的时候就已经指定了编码了,你要在读取这个数据的时候就指定好编码才行

    0
    Bless_you
    Bless_you
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    Enumeration<String> en = request.getParameterNames();
    while (en.hasMoreElements()) {
        String paramName = en.nextElement();
        String paramValue = request.getParameter(paramName);
        //此处的编码与网站编码一致,会出现乱码,导致paypal回复的通知为‘INVALID’
        if(paramName.equals("item_name1")){
            System.out.println("paramValue = " + new String(paramValue.getBytes("ISO8859_1"), "UTF-8"));
            System.out.println("paramValue = " + new String(paramValue.getBytes("ISO8859_1"), "GBK"));
            System.out.println("paramValue = " + new String(paramValue.getBytes("ISO8859_1"), "GB2312"));
            System.out.println("paramValue = " + new String(paramValue.getBytes("gb2312"), "UTF-8"));
            String str = new String(paramValue.getBytes("ISO8859_1"), "UTF-8");
            System.out.println("paramValue = " + new String(str.getBytes("ISO8859_1"), "UTF-8"));
    
        }
        message = message + "&" + paramName + "=" +  paramValue; //URLEncoder.encode(paramValue, "utf-8");
    }

    是URL传参的,我是直接读取的数据@阿信sxq

    0
    Bless_you
    Bless_you

    搞定了,都是自己的问题。。。

    登录-->我的paypal-->用户信息-->销售工具(左侧)-->paypal按钮语言编码(页面底部)-->更多选项-->然后选择一个和你自己网站的编码一样的保存即可

    再里面设置成自己一样的编码就不会有问题了。

    0
    前端大师傅
    前端大师傅

    回答楼主,关于utf-8的误解,国内很多人总说什么文件编码使用utf-8,他们自己一知半解也就算了,在我看来简直是误导新人!utf-8除了节约1个字节以外在我看来,没什么优点。

    在下来说下Utf-8和国外网站为什么不选utf-8的原因吧,其实国际上除了国内的程序很多大的程序厂商基本上很少采用utf-8版本,而是ansi即如paypal采用的GB2312处理中文,即使用ansi处理中文+iso8859-1(1个半字节12比特)来处理除中文之外其它文字。而这样的好处理大多数情况下只占1个多字节。而utf-8的最大问题是可变长度。即像楼主这样的问题,utf-8处理字符是1-3个字节,这样就会导致对不齐的问题,而且容易出差错,性能也会很差,因为没有对齐,得一个一个字节的处理,这样很容易出差错。如果是ansi的中文则是固定2个字节很容易处理,而且速度也比较utf-8要快至少1倍。

    再说下楼主的问题,很简单不是你的程序代码的问题,而是你在接入paypal给的字符串是,人家是已经解码好的gb2312,而你再把这个用utf-8来编码,再解码出来的还是gb2312,所以解码用utf-8还是乱码。

    解决问题很简单,只需要加一个Http header头,让浏览器以gb2312的方式来显示就可以了。

    返回顶部
    顶部
  • 反腐败国际合作"朋友圈"又大了! 2019-07-13
  • 前线 从一面“魔镜” 看苏宁科技集团智能化发展战略 2019-07-13
  • 身份证被盗产生不良记录 网络虚拟账号权属纠纷如何避免 2019-07-07
  • 的确,呆子七窍通了栁窍。[哈哈] 2019-06-20
  • 强国博客首页整合公告 2019-06-08
  • 西海都市报数字报刊平台 2019-05-27
  • 美国反拥枪的孩子很受伤 2019-05-25
  • C罗戴帽单骑救主 葡萄牙33战平西班牙 2019-05-25
  • 证监会去年对外公开监管信息14560条 2019-05-16
  • 中山八路总站调整12公交线 2019-05-16
  • 谢春涛:深刻把握“中国特色社会主义进入新时代”的重大意义 2019-05-09
  • 湖南一博士生举报水利局领导受贿 遭到冒牌纪委约谈 2019-05-09
  • 西安地铁唐风诗韵文化专列将于6月18日首发 2019-04-30
  • 铜梁区旧县街道:全面提升执行力 推动工作落地见效 2019-04-30
  • 上海电影节女性影人大放异彩 中生代女演员不用焦虑 2019-04-29
  • 竟猜赚钱是真的吗 对分斗地主砸金花下载 黑龙江福彩3d开奖号 单机象棋下载 广东新11选5玩法 特码期期准肖 554818开奖直播 浙江20选5综合走势 今天四川快乐12开奖号 捕鱼达人2游戏 极速十一选五技巧 七星彩手机版杀号软件 澳门赌场小姐 与人方便一尾中特 排列五有复式吗计算