Servlets Servlet HttpServletResponse::setCharacterEncoding()如何工作?

Servlets Servlet HttpServletResponse::setCharacterEncoding()如何工作?,servlets,character-encoding,httpresponse,Servlets,Character Encoding,Httpresponse,我了解到,Java通常使用UTF-16作为内部字符串表示形式。 我的问题是,当用Java编写响应并应用不同的字符编码(例如response.setCharacterEncoding(“ISO-8859-1”)时,实际会发生什么情况 它是否真的将响应的正文字节从UTF-16转换为ISO-8859-1,或者只是向响应对象添加了一些元数据?我假设您谈论的是一个按照HttpServletResponse工作的类。如果是这种情况,那么是的,如果调用getWriter,它会更改响应的主体。由返回的write

我了解到,Java通常使用UTF-16作为内部字符串表示形式。
我的问题是,当用Java编写响应并应用不同的字符编码(例如
response.setCharacterEncoding(“ISO-8859-1”)
时,实际会发生什么情况


它是否真的将响应的正文字节从UTF-16转换为ISO-8859-1,或者只是向响应对象添加了一些元数据?

我假设您谈论的是一个按照
HttpServletResponse
工作的类。如果是这种情况,那么是的,如果调用
getWriter
,它会更改响应的主体。由返回的writer必须将写入它的任何字符串转换为字节,并为此使用编码

如果您已经设置了内容类型,那么设置内容编码也将通过
内容类型
标题提供该信息。根据:

使用
text/html
字符串调用setContentType(java.lang.String),并使用
UTF-8
字符串调用此方法,等同于使用
text/html字符串调用setContentType;字符集=UTF-8


我假设您谈论的是一个按照
HttpServletResponse
工作的类。如果是这种情况,那么是的,如果调用
getWriter
,它会更改响应的主体。由返回的writer必须将写入它的任何字符串转换为字节,并为此使用编码

如果您已经设置了内容类型,那么设置内容编码也将通过
内容类型
标题提供该信息。根据:

使用
text/html
字符串调用setContentType(java.lang.String),并使用
UTF-8
字符串调用此方法,等同于使用
text/html字符串调用setContentType;字符集=UTF-8


如果你能准确地说出你所说的是哪个类,那会有帮助。@BalusC你能解释一下为什么不是Java questoin吗?这是一个Servlet API问题,不是Java SE API问题。使用[java]标记仅用于带有
main()
方法的普通java应用程序类和/或JLS可回答的问题。如果您能准确说出您所说的是哪个类,这会有所帮助。@BalusC您能解释为什么它不是java questoin吗?这是一个Servlet API问题而不是java SE API问题。使用[java]标记仅用于带有
main()
方法的普通java应用程序类和/或JLS可回答的问题。您所说的“如果调用getWriter”是什么意思?@itamar:如果您只调用
getOutputStream
并对其进行写入,则编码不会影响响应的主体,只有标题。你所说的“如果你调用getWriter”是什么意思?@itamar:如果你只调用
getOutputStream
并对其进行写入,编码不会影响响应的主体,只会影响标题。