如何在Java中通过REST API获取UTF-8编码的Confluence页面?
解决方案
核心问题原因
- 代码中
InputStreamReader初始化时没有显式指定UTF-8编码,默认会使用JVM运行环境的默认字符集(Windows环境通常为GBK,部分服务环境为ASCII),导致UTF-8编码的响应字节被错误解码 - GET请求不需要设置
Content-Type请求头(该头仅用于标识请求体的格式,GET无请求体),不过该设置不影响编码结果
修复方案
直接修改InputStreamReader初始化逻辑,显式指定UTF-8编码即可,修改后代码如下:
URL url = new URL(https_url); InetSocketAddress inet = new InetSocketAddress(proxy, port); Proxy proxy = new Proxy(Proxy.Type.HTTP, inet); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(proxy); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "application/json;charset=UTF-8"); // 不需要的Content-Type头可以删除,也可以保留不影响 // conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); conn.setRequestProperty("Authorization", auth); // JSON StringBuilder finalJson = new StringBuilder(); // 关键修改:显式指定UTF-8编码读取响应流 InputStreamReader input = new InputStreamReader(conn.getInputStream(), java.nio.charset.StandardCharsets.UTF_8); BufferedReader buffered = new BufferedReader(input); String json; while ((json = buffered.readLine()) != null) { finalJson.append(json); }
补充验证
如果修改后仍有编码问题,可以先打印响应头conn.getHeaderField("Content-Type")确认Confluence返回的编码格式,确认是UTF-8后再调整读取逻辑即可。
内容的提问来源于stack exchange,提问作者user12755870
相关产品推荐
相关产品推荐

