91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OkHttp IllegalArgumentException 異常解決方法

發布時間:2020-06-26 13:33:06 來源:網絡 閱讀:7356 作者:那些事情 欄目:移動開發

在使用 okhttp 的時候,head 的一些項是中文,導致網絡請求失敗,錯誤類似下面的

java.lang.IllegalArgumentException: Unexpected char ...

找了一圈發現是 okhttp 對 head 的編碼做了驗證

Header values are (technically) required to be ISO-8859-1 but in practice only ASCII really works and OkHttp validates such (the exception has nothing to do with Retrofit). That string is a custom user agent and you'll need to restrict its contents to the ASCII character set when creating it.

具體的代碼 ( 在 okhttp3 庫里面的 okhttp3.Headers.java ) 如下:

private void checkNameAndValue(String name, String value) {
    if (name == null) throw new NullPointerException("name == null");
    if (name.isEmpty()) throw new IllegalArgumentException("name is empty");
    for (int i = 0, length = name.length(); i < length; i++) {
        char c = name.charAt(i);
        if (c <= '\u001f' || c >= '\u007f') {
            throw new IllegalArgumentException(Util.format(
              "Unexpected char %#04x at %d in header name: %s", (int) c, i, name));
        }
    }
    if (value == null) throw new NullPointerException("value == null");
    for (int i = 0, length = value.length(); i < length; i++) {
        char c = value.charAt(i);
        if (c <= '\u001f' || c >= '\u007f') {
            throw new IllegalArgumentException(Util.format(
              "Unexpected char %#04x at %d in %s value: %s", (int) c, i, name, value));
        }
    }
}

看源碼,解決的方法很簡單,保證所有的 head 都是符合編碼要求。

但是我的情況是,其中的某一些字符不合要求,這部分服務器不關心,而本地卻又不知道具體哪些是不和要求的。我的解決思路很簡單,挑出不合要求的字符,把這些字符單獨轉碼。

private static String encodeHeadInfo( String headInfo ) {
    StringBuffer stringBuffer = new StringBuffer();
    for (int i = 0, length = headInfo.length(); i < length; i++) {
        char c = headInfo.charAt(i);
        if (c <= '\u001f' || c >= '\u007f') {
            stringBuffer.append( String.format ("\\u%04x", (int)c) );
        } else {
            stringBuffer.append(c);
        }
    }
    return stringBuffer.toString();
}

這樣

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰都县| 交城县| 天津市| 大方县| 大兴区| 花莲市| 察隅县| 肥城市| 友谊县| 黄平县| 广饶县| 棋牌| 苍南县| 拜城县| 诸暨市| 比如县| 德惠市| 泸溪县| 黑水县| 高清| 南涧| 东乡族自治县| 安福县| 瑞金市| 蒙城县| 阿拉善左旗| 崇义县| 交城县| 自治县| 曲松县| 鲁山县| 沽源县| 城口县| 西贡区| 临湘市| 准格尔旗| 新闻| 界首市| 开远市| 东丽区| 通河县|