You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Android Volley StringRequest GET请求返回UTF-8编码响应?

解决Volley StringRequest返回UTF-8编码字符串的方法

当然可以搞定这个问题!Volley默认的StringRequest确实会采用ISO-8859-1编码解析响应内容,不过我们只需要简单自定义一个请求类,就能强制让它用UTF-8来处理返回的字符串。

方法一:自定义UTF8StringRequest类(推荐)

直接继承StringRequest,重写parseNetworkResponse方法,在里面指定UTF-8编码即可,这样所有请求都能统一处理,不用重复写转码逻辑:

import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;

import java.io.UnsupportedEncodingException;

public class UTF8StringRequest extends StringRequest {

    public UTF8StringRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
        super(method, url, listener, errorListener);
    }

    public UTF8StringRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
        super(url, listener, errorListener);
    }

    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
        try {
            // 强制使用UTF-8编码解析响应字节数组
            String utf8String = new String(response.data, "UTF-8");
            return Response.success(utf8String, getCacheEntry());
        } catch (UnsupportedEncodingException e) {
            // 编码异常时返回ParseError
            return Response.error(new ParseError(e));
        }
    }
}

之后你只需要用这个UTF8StringRequest替代原来的StringRequest发起请求,拿到的响应就是UTF-8编码的字符串了。

方法二:临时手动转码(不推荐)

如果你不想自定义类,也可以在收到默认响应后手动转码,但这种方式需要每次请求都写一遍,不够优雅:

StringRequest request = new StringRequest(Request.Method.GET, yourUrl,
        response -> {
            try {
                // 将ISO-8859-1编码的字符串转成UTF-8
                String utf8Response = new String(response.getBytes("ISO-8859-1"), "UTF-8");
                // 这里使用utf8Response进行后续业务处理
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        },
        error -> {
            // 处理请求错误逻辑
        });

另外补充一点:如果服务器返回的响应头里已经正确设置了Content-Type: text/plain; charset=utf-8,理论上Volley会自动识别编码,但如果服务器没设置或者设置错误,就需要我们用上面的方法手动指定编码来解决乱码问题。

内容的提问来源于stack exchange,提问作者Barry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:03:53