2010-12-13 63 views
0

J'ai utilisé le code ci-dessous pour obtenir la sortie sur le navigateur en utilisant l'éditeur.Obtenir des caractères indésirables dans Firefox où fonctionne aussi bien dans IE

String b= new String(a.getBytes("UTF-16LE"),"UTF-8"); 

La sortie est très bien avec IE mais dans firefox je reçois

< h3> Commentaires </h 3 > < t a b l e > < t r b g c o l o r = ' # E 7 E 7 E F ' > < t d > P o s t e d O n : 1 2 - 1 3 - 2 0 1 0 1 0 : 3 8 : 2 4 , B y :

Voici l'exemple de sortie du problème.

<!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(); 
     } 
+1

Votre '' n'est pas valide et devrait être deux balises ''. (Et je doute que l'exemple de code corresponde à votre code actuel?) – Arjan

+0

TWO tags ?? puis-je savoir comment ou où mettre cet arjan .. –

+0

simplement '' * et * ' 'ou' '. Vous ne savez pas exactement ce qui est autorisé dans HTML 4. – Arjan

Répondre

1

Je pense que votre problème est que firefox ne sait pas que vous essayez d'afficher unicode. Avez-vous essayé de mettre en place un type de doctype et de contenu approprié?

Le type de contenu doit être < meta http-equiv = "Content-Type" content = "text/html; charset = utf-8">

question similaire - http://www.webdeveloper.com/forum/showpost.php?s=7981302b7ad7c59bb2b79ff03b462e45&p=680562&postcount=6

+0

hey pulkit merci pour la réponse.Mais il ne fonctionne pas après l'utilisation de doctype aussi –

+0

qu'en est-il du type de contenu meta tag? J'ai mis à jour la réponse pour l'inclure. –

+0

J'ai utilisé cette

2
String comment = new String(cmntbox.getBytes("UTF-16LE"),"UTF-8"); 

est presque certainement faux. La chaîne que vous obtenez de Utility.getCommentPage doit contenir les caractères que vous voulez. Convertir ces caractères en octets en utilisant un encodage, puis en convertissant les octets en caractères avec un autre encodage, entraînerait ce que vous voyez.

En particulier, un octet sur deux en codage UTF-16 pour le code HTML type est égal à zéro. Et zéro est un octet parfaitement valide qui code dans un seul caractère NUL en UTF-8. IE pourrait penser: «Clairement, c'est faux, alors je vais essayer d'être utile et faire ce que je pense que vous vouliez dire»; tandis que Firefox montre juste ce que vous avez dit que vous vouliez.

Qu'est-ce qui se passe si vous sautez la conversion et juste faire

pw.write(cmntbox); 

directement? Vous avez déjà fait le response.setContentType avec le charset= avant de faire le response.getWriter. Lorsque vous puis write une chaîne, il devrait faire le codage de caractères pour vous.

+0

sauter cette conversion à nouveau je fais face à des problèmes d'encodage, même dans IE il y aura des problèmes si je saute cette conversion –

+0

salut ken, quand je supprime cette chose de conversion, le commentaire fonctionne mais pw.write (theString); donne de la camelote, c'est l'image binaire qui est ensuite convertie en chaîne. –

+0

@pras, étant donné votre exemple de code: comment pourriez-vous sortir à la fois le texte * et * une image? Vous dites au navigateur d'attendre du HTML, n'est-ce pas? Alors, que devrait faire un navigateur en lui envoyant une image et du texte plutôt que du HTML? Qu'est-ce que IE vous montre alors? – Arjan