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
相关产品推荐
相关产品推荐

