thenewone Geschrieben 4. September 2009 Geschrieben 4. September 2009 Hallo, ich habe eine kleine Anwendung welche gewisse Operationen durchführen soll. Hierbei werden auch Inhalte aus Textdateien gelesen welche von externen Systemen kommen. Innerhalb dieser können Umlaute enthalten sein. Diese Umlaute sollen nun umgesetzt werden. Das ist so weit kein Problem, unter Windows läuft das ganze ohne Probleme. Lege ich jetzt genau die gleiche Anwendung auf den Linux-Server und lasse diese durchlaufen so kommt ein Fehler - die Umlaute werden nicht erkannt. Ich habe nun den Bereich extrahiert und einen einfachen Testcase dafür geschrieben um das Problem zu fixen - allerdings ohne wirklichen Erfolg. Ich bekomme es einfach nicht gebacken. Hier erstmal etwas Code: public static String convertStringWithoutUmlaute(String source) { return source.replaceAll("ä", "ae").replaceAll("ö", "oe").replaceAll("ü", "ue").replaceAll("Ä", "Ae").replaceAll("Ö", "Oe").replaceAll("Ü", "Ue").replaceAll("ß", "ss"); } Aufruf über public void testStringUtil() { assertEquals("ae", StringUtil.convertStringWithoutUmlaute("ä")); assertEquals("Ae", StringUtil.convertStringWithoutUmlaute("Ä")); assertEquals("oe", StringUtil.convertStringWithoutUmlaute("ö")); assertEquals("Oe", StringUtil.convertStringWithoutUmlaute("Ö")); assertEquals("ue", StringUtil.convertStringWithoutUmlaute("ü")); assertEquals("Ue", StringUtil.convertStringWithoutUmlaute("Ü")); assertEquals("Boerdesprint", StringUtil.convertStringWithoutUmlaute("Bördesprint")); assertEquals("woeltge", StringUtil.convertStringWithoutUmlaute("wöltge")); assertEquals("Gneisenaustrasse 3", StringUtil.convertStringWithoutUmlaute("Gneisenaustraße 3")); } Führe ich den Testcase unter Windows aus so läuft das ganze ohne Probleme durch. Auf Linux schlägt die Anwendung fehl. Ich vermute hier mal ein Encoding-Problem - nur wie kann ich dieses Problem lösen ? Danke für die Hilfe Gruß T Zitieren
kingofbrain Geschrieben 4. September 2009 Geschrieben 4. September 2009 Servus, wo kommt der String "source" her? Aus einer Datei, die Du selbst einliest? Liest Du sie im korrekten Encoding ein? Weißt Du, welches Encoding es ist (ich vermute mal ISO-8859-1 und Linux vermutet UTF-8)? Du kannst beim Einlesen der Datei z.B. mal so was machen: BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream(filename), "ISO-8859-1")); [/PHP] Damit legst Du fest, in welchem Encoding der Eingabestrom gelesen wird. Wenn Du diese Angabe nicht machst, wird im Standardencoding gelesen. Peter Zitieren
thenewone Geschrieben 4. September 2009 Autor Geschrieben 4. September 2009 Hi das ist schon der Fall, sprich hier lese ich schon den richtigen Stream ein Dennoch übersetzt der mir meine Umlaute nicht entsprechend Gruß T Zitieren
flashpixx Geschrieben 4. September 2009 Geschrieben 4. September 2009 In welchem Encoding liegen Deine Daten vor? Gerade bei Unicode gibt es mehrere Varianten: UTF8 UTF8 ohne BOM UTF16 ohne BOM UTF16 Little-Endian ITF16 Little-Endian ohne BOM Zitieren
kingofbrain Geschrieben 4. September 2009 Geschrieben 4. September 2009 Und wie liest Du die Daten genau ein (Codebeispiel)? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.