universalchardet.jar wo bzw wie?

alfware17

Aktives Mitglied
Ich habe mit einem Java Programm das Problem, daß es eine ANSI (Codepage 1252/Windows) Textdatei lesen muß und den Inhalt in eine SQLite 3 Datenbank einspeichern. Nun haut das unter Windows hin, die Zeilen die auch Umlaute enthalten , lassen sich später wieder lesen und sehen gut aus (das gleiche Programm).
Nicht so unter Linux Mint. Die Umlaute gehen verloren, so wie ich herausfand, schon beim Einspeichern.

Nun weiß ich ja, Java benutzt UTF8 und wollte das im Linux-Clone des Programms konvertieren. Nur ging das nicht, da ich die Codepage nicht herausfinden/einstellen kann bzw die Konvertierung schief geht, es sieht irgendwie noch komischer aus. Da ich mir nicht sicher war bezüglich der CP 1252. habe ich ChatGPT mir Möglichkeiten geben lassen, die Konvertierung auch bei unbekannter Codepage zu machen und kam eben auf das universalchardet.

Ich habe es heruntergeladen aus dem GIT und suchte die .jar die ich meinem Buildpath hinzufügen kann - so kenne ich es aus der "Schule" (ich habe Java mal 2014 in einem Weiterbildungskurs gelernt). Nur leider ist da keine .jar nur das komplette Java-Projekt. Wenn ich das in Eclipse importiere, kann ich es nicht erstellen, weil da wird was von Maven verlangt/gemeckert, was ich nicht kann. Ist Maven schwierig/notwenig? Ich möchte mir auch nicht die ganze Eclipse/den Workspace zerschießen.
Könnte ich die Java-Klassen adoptieren und in mein Projekt als neues Package aufnehmen? Warum finde ich keine fertige .jar?

Das "Problem" habe ich auch versucht anders zu lösen :
1 Konvertieren der Textdatei nach UTF8, leider fliegen mir dann meine parallelen Lazaraus-Programme um die Ohren, Lazarus nutzt zwar auch standardmäßig UTF8. nicht aber meine Anwendungsprogramme, die aus historischen Gründen in der Windows/CP1252 Welt arbeiten, teils noch schlimmer mit CP850 weil mein PC/Windows/CMD total verdreht ist und alleine auf CP850 geht und weil ich andererseits Rücksicht auf MSDOS/Win32 nehmen muß, wo ich gerne eine 1-Byte-Codierung behalten will.
OK ich habe die Textdatei NUR FÜR LINUX JAVA in UTF8-Form konvertiert, aber Java sagt trotzdem nein.
2.Ich habe im Programm statt an der schon eingelesenen Zeichenketten (FileReader+BufferedReader) früher anzusetzen und habe jetzt was mit (InputStreamReader/BufferedReader) wo ich CP1252 gleich angeben kann. Unter Linux lief es, nun muß ich noch sehen ob ich es für Windows auch so lassen kann

Aber wie kann ich den universalchardet ausprobieren?
 

Robert Zenz

Top Contributor
Meine Wiederholung zum Thema `String`s und Enkodierung kann hier mal nicht schaden, denke ich.

2.Ich habe im Programm statt an der schon eingelesenen Zeichenketten (FileReader+BufferedReader) früher anzusetzen und habe jetzt was mit (InputStreamReader/BufferedReader) wo ich CP1252 gleich angeben kann. Unter Linux lief es, nun muß ich noch sehen ob ich es für Windows auch so lassen kann
Dies ist der korrekte Weg. Beim einlesen der Datei gibst du an dass die Datei/Inhalt CP-1252 ist:

Java:
new BufferedReader(new InputStreamReader(fileInputStream, Charset.forName("windows-1252")))

Dann kannst du damit `String`s lesen welche intern UTF-16 sind, und diese schreibst du dann wieder irgendwo "mit der wiederum gewuenschten Enkodierung) hinaus.

Aber wie kann ich den universalchardet ausprobieren?
Die einfachste Variante ist du laedst das jar herunter, legst es irgendwo in deinem Projekt ab und fuegst es dann deinen Build-Path/Klassenpfad hinzu. Dann kannst du die Klassen aus dem jar in deinem Projekt nutzen.

Das Problem beim detektieren von Charsets ist dass es durchaus Ueberschneidungen gibt, zum Beispiel "Hallo Welt" kann sowohl gueltiges ASCII, UTF-8, ISO-8859 und CP-1252 sein. Das muss man sich immer bewusst sein.
 

alfware17

Aktives Mitglied
Danke für den direkten Link (habe tatsächlich das "release" übersehen ... )
Und die Weiterbildung/Wiederholung. Werde ich mir mal verinnerlichen
 

Neue Themen


Oben