2016-04-19 5 views
0

Darunter können Sie meinen Code sehen;Java InputStreamReader Kann nicht lesen Spezielle (türkische) Zeichen

final BufferedReader br = new BufferedReader(
       new InputStreamReader(new FileInputStream(f),"UTF-8"));// tried also "iso-8859-9" 
String strLine; 
while ((strLine = br.readLine()) != null) { 
    total += "\n" + strLine; 
} 
br.close(); 

Hier unten ist der Ausgang .. was soll ich tun?

insan�n sec�ld�g� combobox

+1

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. –

+5

ist das möglich, dass Konsole, die Sie verwenden, keine Unicode-Zeichen unterstützt? –

+0

Vielleicht hilft das: http://stackoverflow.com/questions/16435525/how-to-read-utf-8-encoded-file-in-java-with-turkish-characters – Pieter

Antwort

1

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.

0

Also was ist die eigentliche Dateicodierung? Öffnen Sie einen Hex-Editor und schauen Sie sich die Byte-Werte für insan�n an (besonders das gebrochene Zeichen). Wenn Sie den Byte-Wert haben, können Sie die tatsächliche Codierung finden. Jetzt haben Sie einfach zwei falsche Codierungen ausprobiert.