2016-04-18 2 views
0

Ich habe eine Java-Webanwendung, die aus der Datei auf der Festplatte liest und die erforderlichen Werte zurückgibt. Die Datei auf der Festplatte enthält UTF-8-Zeichen.Tomcat Textdatei Codierung

Beispiel des Dateiinhaltes:

lähedus teeb korterist atraktiivse üüriobjekti välismaalastele 

Wenn die Webapp ausgeführt auf localhost* dann dem Servlet liest von der Festplatte und kehrt:

lähedus teeb korterist atraktiivse üüriobjekti välismaalastele 

Wenn ich laufe die gleiche Anwendung auf einem separaten Server die gleiche Anfrage gibt das zurück:

l??hedus teeb korterist atraktiivse ????riobjekti v??lismaalastele 

Dies ist eine reine Codierung ist aber ich weiß nicht, wie ich es lösen soll.

Was ich versucht habe:

  • Ich habe diese zu config/server.xml

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" 
    URIEncoding="UTF-8"/> <!-- THIS PART 
    

Aber es half nicht. Was sollte ich in der Konfiguration ändern, damit es auch auf dem Server funktioniert? Danke!

EDIT

ich aus einer txt-Datei auf dem Server enthält json Strings lese. Ich benutze Java BufferReader, um den Inhalt zu lesen. Wie ich in den Kommentaren erwähnt habe, wird dieses Problem nicht vom Leser verursacht, weil das gleiche auf localhost funktioniert.

Ich sende die Antwort über ein Servlet, das nur den JSON-String ausspült. Wieder die gleiche Geschichte wie beim Leser.

Ich bekomme die Fragezeichen auf jedem Client, den ich die Anfrage (Browser, Android, etc).

+0

Was hat die URI-Codierung mit dem * Inhalt * der Dateien zu tun?Ich fürchte, Sie sind im Moment nicht sehr klar. –

+0

Der Inhalt der Datei spielt keine Rolle. Ich wollte nur klarstellen, dass die Originaldaten nicht die Fragezeichen haben – KasparTr

+0

Also warum hast du gesagt "Die Datei auf der Festplatte enthält UTF-8 Zeichen"? Es ist mir immer noch nicht klar, was das Problem ist. Was meinst du mit "es gibt mir Fragezeichen"? Bitte geben Sie mehr Mühe, um wirklich, sehr klar in Ihrer Frage zu sein. –

Antwort

1

Ihre lokale Datei scheint in UTF-8 zu sein, mit einer falschen Konvertierung in eine Einzelbyte-Codierung. Wenn man eine Multi-Byte-Sequenz für ein spezielles Zeichen sieht, ergeben sich zwei nicht konvertierbare Zeichen (?).

Die Anwendung liest es ohne Angabe der Codierung und verwendet daher die Codierung des Systems. Das ist nicht etwas, was du willst.

Und dann müssen Sie den falschen Lesecode finden: Oft gibt es eine überladene Methode, wo man die Codierung hinzufügen kann. Berüchtigt ist jedoch FileReader, diese Dienstprogrammklasse verwendet immer die Standardcodierung. Prüfen Vorkommen:

  • Input
  • new String
  • String.getBytes
  • Scanner

Für eine gute Ordnung, aber wahrscheinlich nicht der Fall, hier: eine Antwort, dass Text Nachgeben sollten angeben der Zeichensatz im Inhaltstyp.

+0

Danke, ich werde versuchen, mit Ihren Anweisungen zu debuggen. Ja die Systemcodierung kann auf meiner Maschine und dem Server anders sein und somit kann es sicher der Leserfehler sein: P – KasparTr