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

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

然后客户端这边输出正常

相关推荐
曲幽3 天前
Flask核心技能:从零上手视图函数
python·json·app·web·get·post·request·response
teacherlg24 天前
Source Insight 乱码问题解决
c++·乱码·编码·sourceinsight
邪恶紫色秋裤1 个月前
解决IntelliJ IDEA控制台输出中文乱码问题
java·ide·乱码·intellij-idea·报错·中文
Irene19912 个月前
Request 和 Response 都使用了 Fetch API 的 Body 混入
request·response·body混入
Lilixxs3 个月前
VBA 中使用 ADODB 操作 SQLite 插入中文乱码问题
数据库·中间件·sqlite·乱码·vba·odbc·adodb
胡斌附体5 个月前
mobaxterm终端sqlplus乱码问题解决
数据库·乱码·sqlplus·字符集设置
初级代码游戏7 个月前
源码:处理文件格式和字符集的相关代码(3-3)
字符编码·乱码·代码页·unicode·bom·utf·文本格式
witton7 个月前
记一次pdf转Word的技术经历
pdf·乱码·word·pymupdf·mupdf·mupdf.js·winansiencoding
伊织code9 个月前
macOS 使用 iconv 转化文件编码
macos·乱码·文件·编码·转换·iconv