Also versuche ich, dass mein Programm eine Textdatei mit einer Liste von Namen ausgibt. Einige der Namen haben seltsame Zeichen wie Åström.
Ich habe diese Liste von Namen von einer Webseite genommen, die in "UTF-8" kodiert ist, oder zumindest bin ich ziemlich sicher, weil die Seitenquelle
sagt"meta http-equiv=" Inhaltstyp "content=" text / html; charset = UTF-8 "/"
Das habe ich bisher versucht:
%Vor%und ich bin ein wenig verwirrt, warum es nicht funktioniert. Die Ausgabe, die ich bekomme, ist "à ... ström", was sehr komisch ist.
Kann mir bitte jemand in die richtige Richtung zeigen? Danke!
Und zu einem anderen nicht verwandten Hinweis gibt es eine einfachere Möglichkeit, neben dem klobigen
eine neue Zeile in eine Textdatei zu schreibenout.write (System.getProperty ("line.separator"));
das habe ich? Ich sah das online irgendwo und es funktioniert, aber ich habe mich nur gefragt, ob es einen saubereren Weg gab.
Der Inhalt ist tatsächlich in UTF-8 und es erscheint OK, wenn er auf der Konsole gedruckt wird. Was das Problem verursachen könnte, ist die Entschlüsselung und Codierung der Zeichenfolge, die nicht notwendig ist. Versuchen Sie anstelle eines OutputStreamWriter, einen java.io.PrintWriter zu verwenden. Es verfügt über die println -Methoden, die den String mit dem Systemlinientrennzeichen am Ende ausdrucken. Es würde ungefähr so aussehen:
%Vor%Wenn Sie die Datei öffnen, um sie zu sehen, versuchen Sie es mit einem Browser. Sie ermöglichen es Ihnen, die Codierung nach dem Öffnen zu wählen, so dass Sie mehrere Kodierungen schnell ausprobieren können, um zu sehen, was wirklich verwendet wird.
Der Editor ist kein besonders funktionsreicher Editor. Es wird versuchen, die Dokumentcodierung zu erraten, manchmal mit unerwarteten Ergebnissen . "Klartext" -Dokumente enthalten keine Metadaten über ihre Kodierung, die ihnen bestimmte Einschränkungen gibt. Windows-Apps (einschließlich des Editors) verwenden häufig die Byte-Reihenfolge-Markierung (U + FEFF oder "\uFEFF"
in Java-Strings), um festzustellen, ob die Codierung ein Unicode-Format ist. Das könnte Notepad helfen; Es wird für Ihr Webseitenproblem nutzlos sein.
Die HTML 4-Spezifikation definiert , wie die Ausgabecodierung festgelegt werden sollte . Sie sollten den Content-Type
HTTP-Header zusätzlich zur Angabe der Metakodierung festlegen.
Sie erwähnen nicht, was Sie in Ihrer Web-App verwenden. Ein Servlet sollte den Inhaltstyp setContentType("text/html; charset=UTF-8")
festlegen. ; Eine JSP sollte die Seitenanweisung verwenden, um das Gleiche zu tun. Andere Ansichtstechnologien bieten ähnliche Mechanismen.
Dieser Code führt einige nutzlose Operationen durch; Es transkodiert Zeichendaten von UTF-16 nach UTF-8, dann zurück von UTF-8 nach UTF-16 und schreibt dann Daten in ein Writer
(welches das UTF-16 wieder in UTF-8 umsetzt). Dieser Code ist äquivalent:
Verwenden Sie eine PrintWriter
, um die Newline-Unterstützung zu erhalten.
Sie können mehr über die Zeichenkodierung in Java hier lesen , hier und hier .
Tags und Links eclipse java unicode special-characters