2016-07-15 18 views
1

Ich habe ein Problem mit meiner Anwendung auf Websphere 8.5.5. Es ist eine Federauflage-Anwendung, die zum Senden von E-Mails verwendet wird. In meinem Service erhalte ich die Maildetails und benutze die Feder, um sie an die Empfänger weiterzuleiten. Es funktioniert gut, aber wenn ich versuche, Nachrichten mit nicht-ASCII-Zeichen zu senden, kommt die Nachricht mit den Sonderzeichen, die durch ein Fragezeichen ersetzt werden. Die Codierung UTF-8 funktioniert nicht. In meinem PC läuft die Anwendung auf dem Liberty Profile Server und es funktioniert auch nicht. Ich googeln das Problem und ich fand, dass der Frühling braucht einen Filter, um die Sonderzeichen zu interpretieren, so dass ich hinzufügen, diese Zeilen zu meinem web.xmlWebsphere 8.5.5 UTF-8 Codierung Problem

<filter> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>CharacterEncodingFilter</filter-name> 
    <url-pattern>/</url-pattern> 
    </filter-mapping> 

On Liberty funktioniert gut, aber wenn ich die App auf Websphere bereitstellen es doesn‘ t.

Ich habe versucht, direkt die Nachricht in utf-8 mit dem String-Konstruktor zu übersetzen:

new String(byteArray, "UTF-8") 

und das gleiche passiert. Es funktioniert auf Freiheit, aber nicht auf Websphere. Dann fand ich, dass Sie WebSphere erzwingen UTF-8 durch das Hinzufügen dieser JVM Argumente zu verwenden:

-Dclient.encoding.override=UTF-8 
-Dfile.encoding=UTF-8 

wie in dieser Antwort erklärt: Character encoding issues on websphere

ich die Parameter auf meinem Server gesetzt und Neustart wie in vielen Anleitungen ich im Internet gefunden, erklärt, aber offensichtlich hat es nicht funktioniert.

Dies ist die Ausgabe von locale-Befehl in Linux-Rechner, auf dem ausgeführt wurde:

LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

Ich bin fest und weiß nicht, was anderes zu versuchen.

Jede Hilfe wäre willkommen.

Antwort

2

Die encoding.properties-Datei befindet sich unter <PROFILE_ROOT>/properties ist ein weiterer Speicherort, der Codierungseinstellungen enthält. Der Standardwert (für Englisch) ist en=ISO-8859-1. Aktualisieren Sie diese auf en=UTF-8 und den Server neu starten.

+0

Dank ich fand die Datei, und wie Sie sagen, der Wert ist 'en = ISO-8859-1'. Das Problem besteht nun darin, dass auf dem Server viele Anwendungen laufen, die auf verschiedenen virtuellen Servern gehostet werden. Meine Anwendung läuft auf einem speziell für sie erstellten virtuellen Server. Ist das eine Möglichkeit, die 'encoding.properties' auf einer einzigen virtuellen Serverebene zu setzen? Weil ich nicht möchte, dass die Änderungen auf allen Anwendungen auf dem Server wirksam werden. – amicoderozer

+0

@amicoderozer: 1) Innerhalb der Terminologie von WAS bin ich nicht sicher, was Sie mit dem Begriff "virtueller Server" meinen. Könnten Sie das bitte klären? 2) ISO-8859-1 ist ein Teil von Unicode, daher hätte die globale UTF-8-Einstellung keine Kompatibilitätsprobleme mit Ihren aktuellen Anwendungen. – Haxiel

+0

Es tut mir leid, meine Schuld, ich meine Application Server. Ich habe mich gefragt, ob ich eine andere encoding.properties-Datei auf Anwendungsserverebene festlegen kann. Ok, vielen Dank für die Erklärung. – amicoderozer