Java Umlaute in JSF Page falsch dargestellt


#1

Moin zusammen,

habe in meiner JSF Seite eine Growlmessage, die mir statt ä, ö usw komische Zeichen anzeigt.

Ich arbeite mit MessageBundle (de/en) welches anhand der Browsersprache die Locale setzt.
Klappt auch alles wie gewünscht, bis auf die Umlaute.

Dabei spielt es keine Rolle, ob ich mir den String wie folgt hole:

public class BundleMessages {

public static String getMessage(String name) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Locale locale = facesContext.getCurrentInstance().getExternalContext().getRequestLocale();
    ResourceBundle bundle = ResourceBundle.getBundle("messages", locale);
return bundle.getString(name);
}

}

oder ob ich ihn direkt im JSF hole:

<p:outputLabel for="eanSearchTerm" value="#{msg['productsOverview.search.eanSearchTerm']}"/>

Die Dateien der messages_de.properties und die englische Variante sind als UTF-8 in IntelliJ erstellt. Öffne ich die Dateien mit einem externen Editor, werden die Umlaute auch korrekt dargestellt.
Im Template meiner .xhtml hab ich auch testweise
<?xml version=“1.0” encoding=“UTF-8”?>
eingefügt, aber brachte auch keine Besserung.

Hat jemand ne Idee?

image


#2

Ist das Template selbst auch UTF-8 encodiert?
Hast du auch mal probiert, das <meta charset="utf-8"> zu setzen?
Vielleicht hilft auch https://validator.w3.org/ bei der Problemsuche.

Vor Kurzem gab es mal eine ähnliche Frage: I18n: Thymeleaf Umlaute


#3

Ich würde glatt auf Ersteres tippen - das Template selbst wurde nicht in UTF-8 gespeichert. Wäre es der Browser, der UTF-8 nicht automatisch erkannt hat, stünde dort afaik nur ein Wildcard für unbekannte Codes. Trotzdem aber sollte nicht vergessen werden.


#4

utf-8 ist schon gesetzt, auch mit nochmaligem setzen gehts nicht. Hab die Datei auch nochmal als UTF-8 abgespeichert, aber brachte auch keine Lösung


#5

Keine Umlaute verwenden!

Eintrag wurde erfolgreich entfernt

#6

Hab ich als Übergangslösung :face_with_hand_over_mouth:

Werd ich auch weiterhin so machen notfalls oe usw. scheiss drauf. Solange die wichtigen Werte in datatable usw angezeigt werden alles gut. Da klappt es nämlich🤷‍♂️


#7

Das hier sollte helfen. :slight_smile:

ä = \u00e4
Ä = \u00c4
ö = \u00f6
Ö = \u00d6
ü = \u00fc
Ü = \u00dc

viele Grüße
Steven


#8

danke steven, dass nehm ich mal als Lösung an :slight_smile:


#9

Sehr gern :slight_smile:


#10

Das mag eine schnelle und praktikable Lösung sein, ganz abgesehen davon, dass in der Liste das ß fehlt. Je nachdem was du in den Anzeigen darstellen willst, wirst du dann nach und nach auf andere Zeichen stoßen, die nicht funktionieren.

Ich würde da lieber schauen, ob man den Grund rausfinden kann, warum das Encoding nicht berücksichtigt wird.

Ich hab einfach mal nach deinen Stichworten gegoogelt. Ist sowas wie

request.setCharacterEncoding("UTF-8");

aus

hilfreich?


#11

Hast du es getestet? Ich hatte unter JavaEE7 keinen Erfolg mit dem Webfilter.
Wenn das funktionieren sollte, würde ich den Webfilter vorziehen.

Ansonsten hier noch das ß :slight_smile:

ß = \u00df

viele Grüße
Steven


#12

Mangels einer geigneten Testumgebung nicht. Aber in einem Tomcat-WebServlet-Projekt nutze ich

request.setCharacterEncoding("UTF-8");

selbst.


#13

Hab den Filter mal getestet -> geht leider nicht