2016-07-06 1 views
0

J'ai des caractères Unicode pour tous les pays européens et pour quelques pays asiatiques comme le Japon, la Chine, le coréen. Tous les Unicodes fonctionnent bien pour les pays européens à l'exception du Japon, de la Chine et du Coréen.Caractère encodage ne fonctionne pas pour le japonais, chinois et coréen

Exemple pour le Japon:

dear_name=\u30c7\u30a3\u30fc\u30e9\u30fc 

Exemple pour la Chine:

dear_name=\u4eb2\u7231\u7684 

Exemple pour le coréen:

dear_name=\uce5c\uc560\ud558\ub294 

Exemple pour la Suède (celui-ci fonctionne bien):

dear_name=Till 

Le codage de caractères par défaut est UTF-8.

Template template = VelocityFactory.getTemplate("test.vm", "UTF-8"); 
    String messageText = VelocityFactory.merge(context, template, charset); 

Alors que debug la méthode de fusion, j'ai découvert que le résultat de la fusion est de se grabled ici lui-même pour chinois, japonais, coréen.

public static String merge(VelocityContext context, Template template, String charset) throws Exception { 

     String newResult = null; 

     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
     OutputStreamWriter streamWriter; 
     if(charset != null && charset.length() > 0) { 
      streamWriter = new OutputStreamWriter(outputStream, charset); 
     } else { 
      streamWriter = new OutputStreamWriter(outputStream); 
     } 

     template.merge(context, streamWriter); 
     streamWriter.close(); 

     mergedResult = outputStream.toString();     
     outputStream.close(); 

     return newResult;   
    } 
} 

est en dessous du modèle de courrier et uniquement pour en-tête, il affiche en format correct pour le japonais, le chinois et le coréen, mais pas pour le corps:

<html> 
    <head>  
     <meta http-equiv="Content-Type" content="$contentType"> 
    </head> 
    <body> 
     <div id="content"> 
      <table border="0" cellpadding="0" cellspacing="0" style="margin-left: 0px;"> 
       <tr> 
        <td> 
         <table border="0" cellpadding="0" cellspacing="0" class="textBody" style="margin-bottom: 120px;"> 
          <tr> 
           <td valign="bottom" class="mainHeader" nowrap> 
            $velocityUtils.getMessage("test") 
           </td> 
          </tr> 
          <tr> 
           <td colspan="2"> 
            <img src="$imageBar" class="clipped"> 
           </td> 
          </tr> 
         </table> 
         <div id="info" class="textBody">$velocityUtils.getMessage("test1")<br><br></div>  
        </td> 
       </tr> 
      </table> 
     </div> 
    </body> 
</html> 

Toute information comment résoudre ce problème? Comment encoder correctement ??

Répondre

0

essayez d'ajouter ceci en haut de votre page JSP

<%@ page language="java" pageEncoding="UTF-8"%> 
+0

Il n'est pas un page.It jsp est fichier vm . – Subham

+0

Même exigence cependant, jetez un oeil à http://forum.spring.io/forum/spring-projects/web/64372-setting-content-encoding-in-velocity –

0

vous devez spécifier les jeux de caractères pour le japonais, coréen et chinois

For japanese try: charset=iso-2022-jp 
For korean try: charset=iso-2022-kr 
For chinese try: charset=big5 
+0

Merci ..Je reçois ce problème uniquement lors de l'envoi e-mails à l'utilisateur et là aussi la partie en-tête s'affiche correctement pour toutes les langues asiatiques mais le corps se dérègle – Subham

+0

Les clients de messagerie utilisent le type de contenu défini dans l'en-tête et non dans la méta-tag .... ainsi votre pari le plus sûr est de convertir le contenu du corps à savoir tous les caractères spéciaux à leurs entités HTML et vous n'aurez plus à vous soucier de l'en-tête Content-Type ... utiliser un convertisseur en ligne pour convertir votre contenu >>> [exemple outil de conversion] (https://www.emailonacid.com/character-converter) – coolstoner