Merkwürdiges StringBuilder verhalten (Char Encoding)

Thallius

Top Contributor
Hi,

ich habe eine UTF-8 Datei (mehrfach geprüft ist wirklich eine) die ich in nur in einem Panel ausgeben will.
Dazu habe ich einfach den Stringbuilder genommen:

Java:
		File historyFile=new File("./resources/history");
		if(!historyFile.exists())
		{
			System.out.println("Cant find history file");
			return;
		}
	    
		StringBuilder fileContents = new StringBuilder((int)historyFile.length());
	        Scanner scanner;
		try 
		{
			scanner = new Scanner(historyFile);
		} 
		catch (FileNotFoundException e) 
		{
			return;
		}
	        String lineSeparator = System.getProperty("line.separator");

	        try
	    {
	        while(scanner.hasNextLine()) 
	        {        
	            fileContents.append(scanner.nextLine() + lineSeparator);
	        }
	        this.history=fileContents.toString();
	    } 
	    finally 
	    {
	        scanner.close();
	    }

Nun passiert folgendes:

Wenn ich die App unter OSX oder Windows aus Eclipse heraus starte sind die Umlaute im Panel korrekt.
Wenn ich die History Datei unter OSX oder Windows mit einen Editor (Texteditor, Notepad, Wordpad etc) öffne, sind die Umlaute korrekt.
Wenn ich die App mit java -jar Name.app unter OSX oder Windows starte sind die Umlaute im Panel aber kaputt.

Wer kann mir helfen?

Gruß

Claus
 
Jupp das habe ich auch schon kontrolliert und bei der Run-Configuration auch. Wie gesagt, aus Eclipse heraus klappt es ja auch. Es scheint mehr als würde die App NICHT von UTF-8 ausgehen wenn sie über die .jar gestartete wird. Eventuell muss man da auch noch irgendwas konfigurieren?

Gruß

Claus
 
Hi,
Kannst du mal versuchen, ob du mit dieser Variante auch das selbe Problem hast:
Java:
	public static String readFile(String filePath) {
		File fileDir = new File(filePath);
		BufferedReader in = null;
		StringBuilder sb = new StringBuilder();
		
		if(!new File(filePath).exists()) {
            System.out.println("Cant find history file");
            return null;		}
		
		try {
			in = new BufferedReader(new InputStreamReader(new FileInputStream(fileDir), "UTF8"));
			String newLine = System.getProperty("line.separator");
			String str;
			while ((str = in.readLine()) != null) {
				sb.append(str);
				sb.append(newLine);
			}
		} 
		catch (UnsupportedEncodingException e)  {
			System.out.println(e.getMessage());
		} 
		catch (IOException e) {
			System.out.println(e.getMessage());
		}
		catch (Exception e)	{
			System.out.println(e.getMessage());
		}
		
		finally {
			if(in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		return sb.toString();
	}
@Tausendsassa :Wenn wir schon beim Thema StringBuilder sind was ist das denn??
Ist unschön, solche Fragen in einem Thread zu stellen, der zwar etwas damit zu tun hat, aber nicht in diesen Context gehört. Öffne doch einen neuen Thread und stelle deine Frage dort. Sonst wird das nur ein Chaos...
 
Hi Knilch,

mit Deinem Code funktioniert es. Bleibt trotzdem die Frage warum. Dürfte dann wohl der Scanner sein, der das UTF-8 nicht richtig umsetzt. Kann man dem auch sagen welches Encoding er nehmen soll?

Gruß

Claus
 
mit Deinem Code funktioniert es.
Das ist schon mal gut. Ich benutzte die Scanner- Klasse sehr selten und kann dir nicht sagen, ob es daran liegt. Du kannst aber eine Scanner- Instanz so aufrufen:
Java:
public Scanner(InputStream source, String charsetName)
vielleicht hilft dir das...
Siehe doc der Java-API
 
Zuletzt bearbeitet:

Zurück
Oben