请求头不支持中文,导致连接失败

现在市面上有很多稀奇古怪的设备,在咱们封装请求头信息的时候,会把设备的一些信息传到回台,便于统计设备;这就需要android 获取手机,平板的一些信息了,比如 设备的名字、型号、版本号等等
看下面的一张图

这是在登录的的接口就报错了,当时很奇怪,为什么这么长时间都没有问题,只有这几款设备报错,所以当时就直接跟客户要了这个设备,快递过来找找原因

看报错 说mobile-name 的值是 ‘摆渡者’ 当时还有点懵逼 什么摆渡者,完全不知道什么玩意, 然后一看字段,差点蠢哭,原来这个设备的名字叫 摆渡者 麻蛋的, 直接找到请求头的位置, 打印一下 果然 就是上面的这张图了,既然知道原因了 就解决吧

不支持中文就不传中文,直接转成unicode就完事了

/**
     * 判断一个字符是否是中文
     * @param c
     */
    public static boolean isChinese(char c) {
        return c >= 0x4E00 && c <= 0x9FA5;// 根据字节码判断
    }

/**
     * 判断一个字符串是否含有中文
     * @param str
     **/
    public static boolean isChinese(String str) {
        if (str == null) return false;
        for (char c : str.toCharArray()) {
            if (isChinese(c)) return true;// 有一个中文字符就返回
        }
        return false;
    }

    /**
     * 中文转unicode
     *
     * @param string
     * @return
     */
    public static String stringToUnicode(String string) {
        StringBuilder unicode = new StringBuilder();
        for (int i = 0; i < string.length(); i++) {
            // 取出每一个字符
            char c = string.charAt(i);
            // 转换为unicode
            //"\\u只是代号,请根据具体所需添加相应的符号"
            unicode.append("\\u").append(Integer.toHexString(c));
        }
        return unicode.toString();
    }

 

        // 判断里面是否包括中文
        if (StringUtil.isChinese(SystemUtils.getMobileName())){
            // 如果包括就转成unicode
            String unicode = StringUtil.stringToUnicode(SystemUtils.getMobileName());
            requestBuilder.addHeader("mobile-name", unicode);
        } else {
            requestBuilder.addHeader("mobile-name", SystemUtils.getMobileName());
        }
        // 判断里面是否包括中文
        if (StringUtil.isChinese(SystemUtils.getMobileModle())){
            // 如果包括就转成unicode
            String unicode = StringUtil.stringToUnicode(SystemUtils.getMobileModle());
            requestBuilder.addHeader("mobile-type", unicode);
        } else {
            requestBuilder.addHeader("mobile-type", SystemUtils.getMobileModle());
        }

这里我还是判断一下, 如果包括中文就转码,不包括还是正常传,大多数设备是没有问题的,很少有中文的, 但是也不得不防, 所以头信息还是尽量不要传中文的值,因为市面上的设备是不可控的,我就是个因为考虑不到, 而且也没有遇到这样的设备 才会出现这种问题。

吐个槽,android设备手机就够苦逼的了, android手机机型实在太多了,而且厂商也不一样,确实适配有难度,但是我还要设备平板,特么的 我就有点心态崩了,以前还好,两个独立的项目,现在重构,重新开发,变成一个项目了, 当时头上一片卧槽飞过,这还不是最痛苦的, 还有更苦逼的, 妈的了, 手机我忍了, 平板 pad 我忍了, 现在竟然还要让我设配模拟器, 我当时只想骂街,我嘞个操啊,这是要搞死我的节奏啊,你说好好的手机你不用,你嫌屏幕小,用平板,行, 那就用呗, 现在还要用电脑, 然后用模拟器安装, 我特么心态崩了呀,模拟器跟真机不一样,android都知道,模拟器上可以运行的东西在真机上不一样好使, 真机好使的模拟器不一样通过,有的第三方不支持底层架构, 比如找不到方法,不支持x86等一下,所以没办法,咱又不如大厂子的手子,写不出来那么高级的框架。
哎,没办法,谁让拿着工资,就吃这个饭呢, 凑合吧, 干就完了,就尽最大的努力设配就完了,是在不行 那也是没有办法的。除非放弃框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值