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-Type
header使该信息可用。根据 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
.
我了解到,一般来说,Java 使用 UTF-16 作为内部字符串表示形式。
我的问题是在 Java 中编写响应并应用不同的字符编码时实际发生了什么,例如response.setCharacterEncoding("ISO-8859-1")
.
它实际上是将响应的正文字节从 UTF-16 转换为 ISO-8859-1 还是只是添加一些元数据到响应对象?
我假设您说的是 class,其工作方式与 HttpServletResponse
一致。如果是这种情况,那么是的,如果您调用 getWriter
,它会更改响应的 body。由它返回的编写器必须将写入它的任何字符串转换为字节,并为此使用编码。
如果您设置了内容类型,那么设置内容编码将也通过Content-Type
header使该信息可用。根据 ServletResponse
docs:
Calling setContentType(java.lang.String) with the String of
text/html
and calling this method with the String ofUTF-8
is equivalent with calling setContentType with the String oftext/html; charset=UTF-8
.