firefox中的垃圾角色在IE中工作正常

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

我使用了下面的代码,使用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 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给你看什么?