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") 的顺序就可以了

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

然后客户端这边输出正常

相关推荐
深念Y14 天前
装了 PowerShell 7 还是乱码?
windows·乱码·终端·命令行
深念Y16 天前
踩坑实录:把 Windows 默认 PowerShell 换成 7.x 到底有多坑?一条龙解决指南
windows·乱码·bug·控制台·powershell·管道·流式
SNOWPIAOP18 天前
git status 出现中文乱码的解决方案等
git·乱码·postgres
小李云雾1 个月前
FastAPI重要知识点补充-reponse与request的区别
microsoft·fastapi·request·response
sunriver20002 个月前
【Qt】Qt Creator 19.0.0 编译输出窗口乱码问题
qt·乱码·creator 19.0.0·娉ㄦ
heartbeat..5 个月前
JavaWeb 入门 - HttpServletResponse 响应对象 详解
java·网络·http·web·response
曲幽5 个月前
掌握Fetch与Flask交互:让前端表单提交更优雅的动态之道
python·flask·json·web·post·fetch·response
Irene19915 个月前
Request 和 Response 对比总结 以及在 Service Worker、缓存策略、错误处理中使用
request·response
曲幽5 个月前
Flask核心技能:从零上手视图函数
python·json·app·web·get·post·request·response