Java 使用stringwriter解决编码问题

Java 使用stringwriter解决编码问题,java,stringwriter,Java,Stringwriter,我用过 StringWriter writer = new StringWriter(); request.setCharacterEncoding("ISO-8859-1"); response.setContentType("text/html;charset=ISO-8859-1"); pw =response.getWriter(); IOUtils.copy(sImage, writer); theString = writer.toString(); pw.write(theStri

我用过

StringWriter writer = new StringWriter();
request.setCharacterEncoding("ISO-8859-1");
response.setContentType("text/html;charset=ISO-8859-1");
pw =response.getWriter();
IOUtils.copy(sImage, writer);
theString = writer.toString();
pw.write(theString);
pw.flush();
在客户端浏览器中,我获得的输出为

试着用这个:

response.setContentType("text/html; charset=UTF-16LE");
当然,它不会使您的文本成为ISO-8859-1,但是,现在大多数浏览器支持UTF-16都没有问题。

尝试使用以下方法:

response.setContentType("text/html; charset=UTF-16LE");

诚然,它不会使您的文本成为ISO-8859-1,但是,现在大多数浏览器支持UTF-16都没有问题。

sImage中有什么?如果是二进制数据,那么text/html显然是错误的。@Jim:这是UTF-16LE编码的html。(每读一秒钟)那么克里斯·杰斯特·杨的答案是正确的。设置内容类型和字符编码标题实际上不会使输出匹配。您必须通过在writer中设置适当的编码来实现这一点。设置标题以匹配实际数据,或转换数据以匹配ISO-8859-1标题。sImage中有什么?如果是二进制数据,那么text/html显然是错误的。@Jim:这是UTF-16LE编码的html。(每读一秒钟)那么克里斯·杰斯特·杨的答案是正确的。设置内容类型和字符编码标题实际上不会使输出匹配。您必须通过在writer中设置适当的编码来实现这一点。将标题设置为与实际数据匹配,或将数据转换为与ISO-8859-1标题匹配。@pras:您的浏览器不喜欢字节顺序标记(BOM)?尝试使用
UTF-16
而不是
UTF-16LE
。但是,您的浏览器违反了RFC 2781的规定,即如果使用
UTF-16LE
,则应该接受BOM(但可选)。@pras:您的浏览器不喜欢字节顺序标记(BOM)?尝试使用
UTF-16
而不是
UTF-16LE
。但是,您的浏览器违反了RFC 2781,即如果使用了
UTF-16LE
,则应该接受BOM(但可选)。