Problem mit Zeichenkodierung in Java

Hallo,

ich habe eine Datenbank mit der Kodierung SQL_ASCII und versuche diese über Java mit JDBC ein u auszulesen. Allerdings kriege ich bei Sonderzeichen wie Umalute Probleme und kann die nicht korrekt darstellen. Wie umgehe ich in Java dieses Problem?

			Class.forName("org.postgresql.Driver");
			String url = beanGIS.getServer() + beanGIS.getDatabase();
			System.out.println(beanGIS);
			conn = DriverManager.getConnection(url, beanGIS.getUsername(),
					beanGIS.getPassword());
		    s = conn.createStatement(
                       ResultSet.TYPE_SCROLL_INSENSITIVE,
                       ResultSet.CONCUR_UPDATABLE);

SQL_ASCII nimmt keine weiteren Änderungen an deinen Daten vor.

Das Problem dürfte also auf der Ausgabeseite zu suchen sein - gibst du für deine Seite den richtigen Charset an?

Schau mal, dass du ‘client_encoding’ ggf. auch auf SQL_ASCII setzt.

Hab ich versucht… aber das Problem ist immer noch das gleiche. Kann man das encoding direkt im Java Code einbetten? Hab das client_encoding direkt im SQL eingesetzt.

Sollte gehen.

test=# show client_encoding;
 client_encoding
-----------------
 LATIN1
(1 row)

test=*# set client_encoding='utf8';
SET
test=*# show client_encoding;
 client_encoding
-----------------
 utf8
(1 row)

Andreas

Wie gesagt, genau dass habe ich versucht, allerdings erhalte ich Java im Recordset nach wie vor nicht die richtigen Zeichen.

Wie sieht das client_encoding der Verbindung aus, die die Daten schreibt?

Aber an sich sollten die Daten in der DB gar nicht verändert werden - sicher, dass das kein Problem beim Schreiben bzw. Darstellen ist?

Die Daten sind vom GEO Format Shape in die Datenbank importiert. Diese Daten sollen ausgelesen und dabei bekomme ich nich die richtigen Zeichen. Die Datenbank ist auf SQLASCII konfiguriert.

Das ist keine Antwort auf meine Frage.

Da SQL_ASCII die Daten nicht verändert, bist du dir sicher, dass die Daten beim Import schon das gleiche Format hatten wie jenes, dass du für die Ausgabe benötigst?

Wenn deine Webseite per Default (xhtml) UTF8 darstellt, musst du die Zeichen schon derart passend in die Datenbank schreiben, damit die wieder richtig ausgelesen und angezeigt werden.

Alson ich mache schon mal gar nichts mit web anwendung, dass ganze scheitert schon direkt am recordset in der java logik (per sysout und debugger getestet).

Die Shape Daten müssen mit SQL ASCII importiert werden und werden sonst auch nicht verändert, sondern nur gelesen.

Quizfrage: wie sehen die Daten beim Schreiben aus?

Wie gesagt es wird eine Datenbank erstellt und anschließend werden die Datensätze von der Shape Datei folgendermaßen importiert:

INSERT INTO "test" ("poi_name",the_geom) VALUES ('MENTÔKHÁZ','SRID=2398;0101000000BA66F2CD360F3340A29C685721C14740');

Diese Daten möchte ich mit der JDBC in Java auslesen und dabei werden im Recordset leider nicht die korrekten Zeichen verwendet.

Vergiß mal Java und schaue mit psql, was in der Tabelle steht.

Andreas

Da steht der korrekte Wert drin. In der Datenbank sind die Daten alle korrekt enthalten, nur das was ich auslese ist dann nicht mehr korrekt.

Dann sollten andere Clients mit demselben client_encoding das auch können…

Andreas

Und das wäre meine Frage… wie stelle ich das mit dem client_encoding in Java ein? So, dass ich die richtige Zeichen verwende.

http://www.pg-forum.de/programmierung/2471-problem-mit-zeichenkodierung-java.html#post12534

Da waren wir schon mal.

Da ja das mit dem Set nicht geklappt hat… wäre meine Frage, ob man beim Auslesen vom recordset den string einfach in den korrekten Zeichensatz konvertieren kann. In Perl ist das möglich, nur bei Java hab ich dafür keine Möglichkeit gefunden. Da ja das Problem nicht auf Datenbankseite liegt weiß ich auch sonst nicht weiter.

Hast du schon mal probiert, dein client_encoding auf SQL_ASCII zu setzen?

Wenn ich in Java den Parameter für den client_encoding verändern will, bringt er mir immer die Meldung, dass der JDBC Treiber für ein korrektes Funktionieren die Einstellung UNICODE benötigt. Alles andere verweigert er mir und mit UNICODE gibt er mir nich die richtigen Zeichen aus.

Nun, da hätten wir das Problem ja schon mal eingegrenzt.

Kannst du das Encoding der DB auf UTF8 ändern und das noch mal probieren?
Wie schreibst du die Daten noch mal in die DB, auch mit Java und den gleichen Settings?