Spring WebClient获取含波兰字符HTML时乱码问题求助
解决Spring WebClient波兰字符乱码问题
问题原因
WebClient默认依据响应头的Content-Type字段解析字符编码,若服务器返回的编码为波兰常用的ISO-8859-2,而WebClient未正确识别该编码,就会导致ą、ę、ż这类字符显示为乱码。
解决方案
方案1:强制指定响应编码为ISO-8859-2
修改WebClient配置,通过自定义编解码器强制将字符串解析编码设为ISO-8859-2:
@Bean WebClient webClient() { return WebClient.builder() .codecs(configurer -> { configurer.defaultCodecs() .stringDecoder(StringDecoder.textPlainOnly() .charset(StandardCharsets.ISO_8859_2)); }) .build(); }
方案2:配置解码器优先遵循响应头编码
若服务器响应头已正确声明charset=ISO-8859-2,可配置解码器优先使用响应头指定的编码,同时设置默认编码兜底:
@Bean WebClient webClient() { return WebClient.builder() .codecs(configurer -> { configurer.defaultCodecs() .stringDecoder(StringDecoder.allMimeTypes() .withDefaultCharset(StandardCharsets.ISO_8859_2)); }) .build(); }
方案3:手动读取字节流并转换编码
如果上述配置不生效,可直接读取响应字节流,手动指定编码转换为字符串:
Optional<String> resp = webClient.get() .uri(uri) .retrieve() .bodyToMono(ByteArray.class) .map(bytes -> new String(bytes, StandardCharsets.ISO_8859_2)) .blockOptional();
验证说明
目标页面实际使用ISO-8859-2编码,使用上述任意方案指定该编码后,即可正确解析波兰字符,避免乱码问题。
内容的提问来源于stack exchange,提问作者karixdev
相关产品推荐
相关产品推荐

