2016-07-06 15 views
0

Ich habe Unicode-Zeichen für alle europäischen Länder und für einige asiatische Länder wie Japan, China, Koreanisch. Alle Unicodes funktionieren gut für europäische Länder mit Ausnahme von Japan, China und Korea.Zeichenkodierung funktioniert nicht für Japanisch, Chinesisch und Koreanisch

Beispiel für Japan:

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

Beispiel für China:

dear_name=\u4eb2\u7231\u7684 

Beispiel für Koreanisch:

dear_name=\uce5c\uc560\ud558\ub294 

Beispiel für Schweden (dies funktioniert gut):

dear_name=Till 

Die Standardzeichencodierung ist UTF-8.

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

Während debuging die merge Methode, die ich herausgefunden, dass das fusionierte Ergebnis grabled immer hier selbst für Chinesisch, Japanisch, Koreanisch.

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;   
    } 
} 

Unten ist die Vorlage Mail und nur für Kopf in richtigen Format für Japanisch, Chinesisch es angezeigt wird, und Koreanisch, aber nicht für den Körper:

<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> 

Alle Informationen, wie dieses Problem beheben? Wie kodiere ich richtig ??

Antwort

0

Versuchen Sie, diese an die Spitze Ihrer JSP

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

Es angeben müssen, ist kein jsp page.It ist vm Datei . – Subham

+0

Gleiche Voraussetzung, aber schauen Sie sich http://forum.spring.io/forum/spring-projects/web/64372-setting-content-encoding-in-velocity –

0

Sie die Zeichensätze für Japanisch, Koreanisch und Chinesisch

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

Danke .. Ich bekomme dieses Problem nur während des Sendens E-Mails an Benutzer und dort auch der Header-Teil wird korrekt für alle asiatischen Sprachen angezeigt, aber der Körper wird – Subham

+0

E-Mail-Clients verwenden den Inhaltstyp in der Kopfzeile und nicht im Meta-Tag definiert .... so Ihre sicherste Wette besteht darin, den Body-Inhalt, dh alle Sonderzeichen, in ihre HTML-Entities zu konvertieren und Sie müssen sich nicht mehr um den Header Content-Type kümmern ... Verwenden Sie ein Online-Konverter-Tool, um Ihren Inhalt zu konvertieren >>> [Beispiel Konverter-Tool] (https://www.emailonacid.com/character-converter) – coolstoner