如何正确解码Java HTTP响应中的保加利亚语内容?
解决YouTube页面保加利亚语内容解码乱码问题
核心问题是没有正确识别响应的实际编码——YouTube的页面编码并非固定值,不能硬编码Windows-1251或UTF-8,需根据响应头或页面meta标签动态判断。以下是具体解决方法:
一、标准Java HTTP Client 正确解码步骤
不要手动指定编码,先获取原始字节流,再从响应头提取编码信息:
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://www.youtube.com/watch?v=ELArlE7gSmw")) .header("Accept-Charset", "utf-8") // 优先请求UTF-8编码 .build(); // 获取原始字节响应,避免提前错误解码 HttpResponse<byte[]> response = client.send(request, HttpResponse.BodyHandlers.ofByteArray()); String contentType = response.headers().firstValue("Content-Type").orElse(""); // 从Content-Type头中提取编码,无指定则默认UTF-8 Charset charset = contentType.contains("charset=") ? Charset.forName(contentType.split("charset=")[1].trim()) : StandardCharsets.UTF_8; // 用正确编码解析字节流 String html = new String(response.body(), charset); // 后续解析meta标签获取标题即可
如果响应头未明确编码,还需解析HTML中的<meta charset="xxx">或<meta http-equiv="Content-Type" content="text/html; charset=xxx">标签来确定编码。
二、Jsoup 正确解码方式
Jsoup在线Demo能正常显示,是因为它默认会自动检测编码。本地代码出错大概率是手动指定了错误编码,只需让Jsoup自动处理:
// 直接让Jsoup处理编码检测,不要手动设置.charset() Document doc = Jsoup.connect("https://www.youtube.com/watch?v=ELArlE7gSmw") .header("Accept-Charset", "utf-8") .get(); // 提取视频标题 String videoTitle = doc.select("meta[property=og:title]").first().attr("content"); System.out.println(videoTitle);
若仍有问题,可先获取原始字节流再交给Jsoup解析:
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://www.youtube.com/watch?v=ELArlE7gSmw")) .header("Accept-Charset", "utf-8") .build(); HttpResponse<byte[]> response = client.send(request, HttpResponse.BodyHandlers.ofByteArray()); // 让Jsoup从字节流自动检测编码 Document doc = Jsoup.parse(new ByteArrayInputStream(response.body()), null, "https://www.youtube.com"); String videoTitle = doc.select("meta[property=og:title]").first().attr("content"); System.out.println(videoTitle);
三、关键注意事项
- 永远不要硬编码编码值,动态检测是解决多语言乱码的通用方案;
- 请求头添加
Accept-Charset: utf-8,可引导服务器优先返回UTF-8编码的响应,减少编码识别成本。
内容的提问来源于stack exchange,提问作者unityflim
相关产品推荐
相关产品推荐

