Der oder U + FFFD Zeichen ist ein spezielles Zeichen von Unicode als „Ersatzzeichen“ definiert, ein Zeichen angezeigt wird, wenn Sie ein Zeichen stoßen Sie nicht erkennen, oder das Byte Daten sind fehlerhaft und ein Zeichen kann nicht gelesen werden. Der InputStreamReader
-Konstruktor, den Sie verwenden, erlaubt Ihnen nicht, das Verhalten anzugeben, wenn fehlerhafte Daten vorliegen oder wenn ein Zeichen nicht erkannt wird. Es geht davon aus, dass Sie das Standardverhalten der Verwendung des "Ersatzzeichens" verwenden möchten, wenn ein nicht erkanntes Zeichen vorhanden ist oder wenn die Bytedaten falsch formatiert sind, so dass es möglicherweise das ist, was Sie sehen.
Wenn Sie Ihre Ausgabe untersuchen und feststellen, dass Ihre türkischen Zeichen nicht vorhanden sind, aber durch das "Ersatzzeichen" U + FFFD ersetzt wurden, können Sie das Verhalten so ändern, dass anstelle des Ersatzzeichens eine Ausnahme ausgelöst wird Die tatsächliche Ausnahme erleichtert die Erkennung, wenn sich Daten im falschen Zeichensatz befinden.
Um dieses unterschiedliche Verhalten angeben, verwenden Sie diese Version von InputStreamReader
public InputStreamReader(InputStream in, CharsetDecoder dec)
Für die CharsetDecoder
, in
charset.newDecoder().onMalformedInput(CodingErrorAction.REPORT)
.onUnmappableCharacter(CodingErrorAction.REPORT)
passieren, wo charset
Ihr Zeichensatz der Wahl ist, zum Beispiel StandardCharsets.UTF_8
Dadurch wird eine Ausnahme ausgelöst und nicht das Ersatzzeichen eingefügt.
Wenn immer noch das Ersatzzeichen angezeigt wird und keine Ausnahme ausgelöst wird, ist es ziemlich klar, dass das Problem darin besteht, wie Sie die Ausgabe anzeigen.
Randnotiz: Verwenden Sie '+ =' nicht für 'String' Objekte. Zeichenfolgen sind unveränderbar und Sie erstellen viele und viele neue Zeichenfolgenobjekte. Verwenden Sie 'StringBuilder', um Strings in Schleifen zu verketten. –
ist das möglich, dass Konsole, die Sie verwenden, keine Unicode-Zeichen unterstützt? –
Vielleicht hilft das: http://stackoverflow.com/questions/16435525/how-to-read-utf-8-encoded-file-in-java-with-turkish-characters – Pieter