Servlet HttpServletResponse::setCharacterEncoding() 是如何工作的?

How does Servlet HttpServletResponse::setCharacterEncoding() work?

我了解到,一般来说,Java 使用 UTF-16 作为内部字符串表示形式。
我的问题是在 Java 中编写响应并应用不同的字符编码时实际发生了什么,例如response.setCharacterEncoding("ISO-8859-1").

它实际上是将响应的正文字节从 UTF-16 转换为 ISO-8859-1 还是只是添加一些元数据到响应对象?

我假设您说的是 class,其工作方式与 HttpServletResponse 一致。如果是这种情况,那么是的,如果您调用 getWriter,它会更改响应的 body。由它返回的编写器必须将写入它的任何字符串转换为字节,并为此使用编码。

如果您设置了内容类型,那么设置内容编码将通过Content-Typeheader使该信息可用。根据 ServletResponse docs:

Calling setContentType(java.lang.String) with the String of text/html and calling this method with the String of UTF-8 is equivalent with calling setContentType with the String of text/html; charset=UTF-8.