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

IntelliJ特殊字符转码异常求助:Ö转成Ö导致过滤失效

问题根源

这是UTF-8字符被错误用ISO-8859-1解码导致的乱码:Ö的UTF-8编码是0xC3 0x96,如果被当作ISO-8859-1解析,就会变成Ö,自然匹配不上过滤条件,导致列表被清空。Postman能正常显示是因为它默认用UTF-8解析响应,而你的应用没有正确设置编码。

修复方案

1. 强制服务调用的响应解码为UTF-8

检查你的serviceCaller实现,确保读取响应流时用UTF-8编码:

  • 如果用RestTemplate(Spring),配置消息转换器的默认编码:
    import java.nio.charset.StandardCharsets;
    import org.springframework.http.converter.StringHttpMessageConverter;
    import org.springframework.web.client.RestTemplate;
    
    RestTemplate restTemplate = new RestTemplate();
    for (var converter : restTemplate.getMessageConverters()) {
        if (converter instanceof StringHttpMessageConverter) {
            ((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
        }
    }
    
  • 如果是自定义HTTP客户端,读取响应时显式指定UTF-8:
    BufferedReader reader = new BufferedReader(
        new InputStreamReader(response.getInputStream(), StandardCharsets.UTF_8)
    );
    

2. 统一代码中的字符定义

避免直接写特殊字符导致的编码偏差,改用Unicode转义字符\u00D6代替Ö:

response.getSomeList().removeIf(obj -> !obj.getType().equals('\u00D6'));

同时确保你的Java源文件编码为UTF-8(IDE设置:比如IntelliJ IDEA的File > Settings > Editor > File Encodings,将所有编码设为UTF-8),防止编译时字符被错误转码。

3. 验证服务响应的Content-Type头

确认服务返回的Content-Type头包含charset=utf-8(如application/json; charset=utf-8)。如果服务未指定,客户端可能会使用系统默认编码解析,导致乱码。可以在serviceCaller中强制忽略响应头的编码设置,固定用UTF-8解码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:56:03