119 response.setCharacterEncoding(“utf8“) 设置编码之后 编码依然为 ISO-8859-1

前言

最近碰到了这样的一个问题

服务器这边 设置了 encoding 为 utf8, 然后 服务器这边响应了 中文数据回来

客户端那边 拿到的依然是乱码, 然后 查看响应头 Content-Type 中 encoding 为 ISO-8859-1

但是 疑惑的就是, 服务器这边明明配置了 encoding

出现问题的用例

出现问题的代码如下

复制代码
@RestController
@RequestMapping("/HelloWorld")
public class HelloWorldController {

    @PostMapping("/flowResponse")
    public void flowResponse(HttpServletResponse response) throws Exception {
        PrintWriter pw = response.getWriter();
        response.setContentType("text/event-stream");
        response.setCharacterEncoding("utf8");

        for (int i = 1; i < 3; i++) {
            pw.println(String.format("第%s行数据", i));
            pw.flush();
            Thread.sleep(1000);
        }
    }

}

客户端这边 消费, 展示如下

为什么 response 设置 encoding 不成功?

我们看一下 response.setCharacterEncoding 的地方

首先是 response.getWriter 的时候设置了一个默认值 ISO-8859-1

在业务代码中 response.setCharacterEncoding("utf8") 的时候, 发现已经调用过了 response.getWriter

直接忽略了本次的 response.setCharacterEncoding("utf8")

所以说 客户端那边拿到的编码 依然是 ISO-8859-1

response.getWriter 的实现如下, 设置了 usingWriter

问题的解决

调整一下 response.getWriter 和 response.setCharacterEncoding("utf8") 的顺序就可以了

服务器这边的处理更新为如下

然后客户端这边输出正常

相关推荐
heartbeat..4 天前
JavaWeb 入门 - HttpServletResponse 响应对象 详解
java·网络·http·web·response
曲幽11 天前
掌握Fetch与Flask交互:让前端表单提交更优雅的动态之道
python·flask·json·web·post·fetch·response
Irene199120 天前
Request 和 Response 对比总结 以及在 Service Worker、缓存策略、错误处理中使用
request·response
曲幽1 个月前
Flask核心技能:从零上手视图函数
python·json·app·web·get·post·request·response
teacherlg2 个月前
Source Insight 乱码问题解决
c++·乱码·编码·sourceinsight
邪恶紫色秋裤2 个月前
解决IntelliJ IDEA控制台输出中文乱码问题
java·ide·乱码·intellij-idea·报错·中文
Irene19913 个月前
Request 和 Response 都使用了 Fetch API 的 Body 混入
request·response·body混入
Lilixxs4 个月前
VBA 中使用 ADODB 操作 SQLite 插入中文乱码问题
数据库·中间件·sqlite·乱码·vba·odbc·adodb
胡斌附体6 个月前
mobaxterm终端sqlplus乱码问题解决
数据库·乱码·sqlplus·字符集设置