firefox中的垃圾角色在IE中工作正常
我使用了下面的代码,使用printwriter在浏览器上获得了输出firefox中的垃圾角色在IE中工作正常,firefox,character-encoding,Firefox,Character Encoding,我使用了下面的代码,使用printwriter在浏览器上获得了输出 String b= new String(a.getBytes("UTF-16LE"),"UTF-8"); IE的输出很好,但在firefox中我得到了 �C�o�M�M�E�N�T�s�� ����P�o�s�T�E�D� �O�N�:� �1.�2.�-�1.�3.�-�2.�0�1.�0� �1.�0�:�3.�8.�:�2.�4.� �,� �B�Y�: 这是所面临问题的示例输出 <!DOCTYPE HTML
String b= new String(a.getBytes("UTF-16LE"),"UTF-8");
IE的输出很好,但在firefox中我得到了
�C�o�M�M�E�N�T�s�� ����P�o�s�T�E�D� �O�N�:� �1.�2.�-�1.�3.�-�2.�0�1.�0� �1.�0�:�3.�8.�:�2.�4.� �,� �B�Y�:
这是所面临问题的示例输出
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"w3.org/TR/html4/loose.dtd">;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
CONTENT="no-cache">
</head>
<body>
<form name="form" method="post">
<%
String theString = null;
PrintWriter pw = null;
String cmntbox = "";
ServletOutputStream outStream = null;
try {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
InputStream sImage;
con = DBConnection.getConnection();
sql = SELECT statement
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
byte bytearray[] = new byte[1048576];
String newLine = System.getProperty("line.separator");
sImage = rs.getBinaryStream(1);
StringWriter writer = new StringWriter();
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
pw =response.getWriter();
IOUtils.copy(sImage, writer);
theString = writer.toString();
pw.write(theString);
pw.flush();
cmntbox = Utility.getCommentPage(id,prcs_area);
String comment = new String(cmntbox.getBytes("UTF-16LE"),"UTF-8");
pw.write(comment);
pw.flush();
pw.close();
}
;
我认为您的问题在于firefox不知道您正在尝试显示unicode。您是否尝试输入正确的doctype和content类型
内容类型应该是
类似的问题-我认为您的问题在于firefox不知道您正在尝试显示unicode。您是否尝试输入正确的doctype和content类型
内容类型应该是
类似问题-
这几乎肯定是错误的。从实用程序.getCommentPage
获取的字符串应包含所需的字符。使用一种编码将这些字符转换为字节,然后使用另一种编码将这些字节转换回字符,将得到您看到的结果
特别是,在典型HTML的UTF-16编码中,每隔一个字节为零。零是一个完全有效的字节,在UTF-8中编码为单个NUL字符。IE可能会想,“显然这是错误的,所以我会尽力帮助你,做我认为你的意思”;而Firefox只是展示你所说的你想要的
如果您跳过转换而直接执行,会发生什么
pw.write(cmntbox);
直接的?在执行response.getWriter
之前,您已经使用charset=
执行了response.setContentType
。当你写一个字符串时,它应该为你进行字符编码
这几乎肯定是错误的。从实用程序.getCommentPage
获取的字符串应包含所需的字符。使用一种编码将这些字符转换为字节,然后使用另一种编码将这些字节转换回字符,将得到您看到的结果
特别是,在典型HTML的UTF-16编码中,每隔一个字节为零。零是一个完全有效的字节,在UTF-8中编码为单个NUL字符。IE可能会想,“显然这是错误的,所以我会尽力帮助你,做我认为你的意思”;而Firefox只是展示你所说的你想要的
如果您跳过转换而直接执行,会发生什么
pw.write(cmntbox);
直接的?在执行response.getWriter
之前,您已经使用charset=
执行了response.setContentType
。然后,当您编写一个字符串时,它应该为您进行字符编码。您的
无效,应该是两个
标记。(我怀疑代码示例是否与您的实际代码匹配?)两个标记??我能知道如何或在哪里放置那个arjan吗?。只需
和
或
。不确定HTML 4中到底允许什么。您的
无效,应该是两个
标记。(我怀疑代码示例是否与您的实际代码匹配?)两个标记??我能知道如何或在哪里放置那个arjan吗?。只需
和
或
。不确定HTML 4中到底允许什么。嘿,pulkit,谢谢你的回复。但是在使用doctype-also后它就不起作用了。关于内容类型meta标记呢?我已经更新了答案以包含它。我已经使用了它。你能将整个代码粘贴到问题中吗?这可能会有帮助。嘿,pulkit,谢谢你的回复。但是在使用doctype-also之后它就不起作用了。关于内容类型元标记呢?我已经更新了答案以包含它。我已经使用了它。你能将整个代码粘贴到问题中吗?这可能会有帮助。再次跳过转换我会面临编码问题,即使在IE中,如果我跳过转换也会有问题。Hi ken,当我删除转换内容时,注释内容正常,但是pw.write(字符串);这是二进制图像,然后转换为字符串。@pras,给定您的代码示例:您如何同时输出文本和图像?你告诉浏览器要使用HTML,对吗?那么,当浏览器向其发送图像和文本而不是HTML时,它应该做什么呢?那么IE向你展示了什么呢?再次跳过转换我面临编码问题,即使在IE中,如果我跳过转换也会有问题嗨,肯,当我删除转换的东西时,注释的东西是有效的,但是pw.write(字符串);这是二进制图像,然后转换为字符串。@pras,给定您的代码示例:您如何同时输出文本和图像?你告诉浏览器要使用HTML,对吗?那么,当浏览器向其发送图像和文本而不是HTML时,它应该做什么呢?那么IE给你看什么?