"=SimpleDateFormat lokalisierte Monatsnamen

Den ich gesucht habe auf der gesamten Website, aber ich glaube, ich habe eine etwas andere Frage und könnte wirklich mit etwas Hilfe, bevor ich entweder Herzinsuffizienz oder brennen der computer.

Ich dynamisch eine Liste erstellen von Monats-Namen (in der form vom Juni 2011, Juli 2011) und natürlich möchte ich, dass dies vertrauliche Gebietsschema: also ich benutze die einfache Datums-format-Objekt wie folgt:

//the actual locale name is dependent on UI selection
Locale localeObject=new Locale("pl"); 
//intended to return full month name - in local language.
DateFormat dtFormat = new SimpleDateFormat("MMMM yyyy",localeObject);
//this bit just sets up a calendar (used for other bits but here to illustrate the issue
String systemTimeZoneName = "GMT";
TimeZone systemTimeZone=TimeZone.getTimeZone(systemTimeZoneName);
Calendar mCal = new GregorianCalendar(systemTimeZone); //"gmt" time
mCal.getTime(); //current date and time

aber wenn ich dies Tue:

String value=dtFormat.format(mCal.getTime()); 

diese "sollte" return die lokalisierte version von den Namen des Monats. Im polnischen wird das Wort "September" ist "Wrzesień" -- man beachte den Akzent auf dem n ist. Aber alles was ich zurück bekomme ist "Wrzesie?"

Was mache ich falsch?

Danke an alle - ich akzeptiere jetzt, dass es eine Präsentation Problem - aber wie kann ich "Lesen" das Ergebnis von dtFormat sicher - ich habe einige Kommentare unter ref mit getBytes etc. - dies funktioniert in anderen Situationen, ich kann einfach nicht scheinen, um Zugang zu den string-Ergebnis ohne Unordnung es bis

-- FINAL Bearbeiten; für jeden, der kommt über dieses Problem

War die Antwort auf BalusC s blog : http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html#DevelopmentEnvironment

Grundsätzlich die DTformat Objekt wurde wieder UTF-8 und wurde automatisch umgewandelt zurück zu den system-Standard-Zeichensatz, wenn ich es lese in einen string

also dieser code war für mich

new String(dtFormat.format(mCal.getTime()).getBytes("UTF-8"),"ISO-8859-1");

vielen Dank für die Hilfe

  • Funktioniert gut hier. Dein problem liegt in der Präsentation. Bitte Editiere deine Frage, um mehr Details über diesen. Wie genau zeigst du es? Welche UI-Technologie verwenden Sie?
  • k, naja im moment mache ich eine einfache "System.aus.println" jedoch in UI (von denen alle ist die Darstellung der polnischen Figuren in Ordnung) ich bin mit JSP mit diesem am oberen Rand der Seite <%@page contentType="text/html" pageEncoding="UTF-8"%> und lang="pl" in der form element (select-Liste), ist die Anzeige der resultierenden Zeichenfolge.
  • wie Sie wahrscheinlich sagen, ich bin die niedrigsten der niedrigen in Bezug auf Java-Kenntnisse; aber ich habe alle Menüs etc. auf die app perfekt funktioniert, das Umschalten zwischen verschiedenen Sprachen (handcodiert also keine zugrunde liegende framework)
  • ein anderer Gedanke - sorry, halten Sie die EINGABETASTE drücken, wenn ich zum Schluss eine Linie... ich habe versucht mit "new String(dtFormat.format(mCal.getTime()).getBytes("UTF-8")) & "ISO-8859-1"
  • Sie sind also nur in der Begegnung mit dem problem in stdout (dort, wo System.out.println() landet) und nicht in der generierten HTML-Ausgabe der JSP im browser? Wo ist die stdout verbunden? Eingabeaufforderung-Konsole? IDE (Eclipse/Netbeans) - Konsole? Log-Datei?
  • sorry BalusC, ich war mir nicht darüber im klaren, dass ich die Ausgabe in html sowie die Standard-system-Konsole (ausführen JBOSS hier); alle meine anderen HTML-Darstellung in verschiedenen Sprachen funktioniert, genau das, was ich mit dem Ergebnis ist dies: ich fügen Sie es in ein array von strings, die dann wieder auf die Seite der Benutzeroberfläche, wie ein arrayList - Iteration durch diese habe ich einfach die Ausgabe in eine <option></option> Liste - bitte Geduld mit mir, alle meine anderen lokalisierten strings kommen aus einer DB-Tabelle - und alle funktionieren auf dem system.aus-und rendering
  • stdout geht tot er Standard-Eingabeaufforderung, wo ich begann, JBOSS (ist das der richtige Begriff?)
  • Ignorieren Sie die system-Konsole; konzentrieren Sie sich auf die JSP. Sie sollten auf jeden Fall nicht explizit versucht zu Chaos mit der Codierung, wie Sie gezeigt haben, mit Ihren getBytes nennen. Es sollte einfach nur funktionieren, es sei denn, Ihr JSP erklärt, eine Codierung in die Seite, aber der header verwendet eine andere. Blick in Wireshark an, was Sie tatsächlich kommen, über die Leitung, gemessen in bytes, Header und Seite von Metadaten-tags.
  • k, wireshark Berichte content-type UTF-8 ist wie erwartet, habe ich dies in den html-code <meta http-equiv="Content-Type" Content="text/html;charset=UTF-8">"; auch alle Menüs und anderen lokalisierten strings Rendern richtig
  • Dies kann nicht behoben werden. In der Theorie, müssen Sie die Eingabeaufforderung verwenden, der UTF-8-code-Seite, und konfigurieren Sie eine Eingabeaufforderung schriftart unterstützt die Zeichen. Aber es gibt keine solche schriftart für Windows. Aber, zum Beispiel, schreiben Sie die Zeichenfolge, um die Datei mit zum Beispiel new OutputStreamWriter(output, "UTF-8") und betrachten es in UTF-8-fähigen editor sollte zeigen, die richtigen chars. Siehe auch balusc.blogspot.com/2009/05/..., Nachdem alle, nur zu akzeptieren, Jon ' s Antwort. Während es nicht spezifisch genug, er despreately braucht 15 Punkte mehr.
  • 🙂 mir denkt, ich bin gefangen in einigen der Politik hier; -

InformationsquelleAutor Kelly | 2011-10-03
Schreibe einen Kommentar