美文网首页
请求头不支持中文,导致连接失败

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

作者: Db_z | 来源:发表于2020-08-28 10:55 被阅读0次

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

    image.png

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

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

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

    image.png
    /**
         * 判断一个字符是否是中文
         * @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等一下,所以没办法,咱又不如大厂子的手子,写不出来那么高级的框架。
    哎,没办法,谁让拿着工资,就吃这个饭呢, 凑合吧, 干就完了,就尽最大的努力设配就完了,是在不行 那也是没有办法的。除非放弃框架

    相关文章

      网友评论

          本文标题:请求头不支持中文,导致连接失败

          本文链接:https://www.haomeiwen.com/subject/yxoksktx.html