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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:11:28