# UTF-8 Encoding



## TimeIsTheKey (10. Jun 2012)

Hallo

Ich habe eine Mobile App für Android geschrieben und Probleme Input aus einem File zu lesen. Buchstaben wie "Ä","Ö","Ü" usw. werden mit einem Fragezeichen-Symbol dargestellt im App dargestellt Ich habe eine Klasse für Inputfiles geschrieben, die in einer normalen Java Applikation normal funktioniert. Hier die Klasse:


```
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class InputFile{

	private String row;
	private String filename;
	private BufferedReader input;
	private File f;
	
	public InputFile(String filename) throws IOException{
		this.filename = filename;
		f = new File(filename);
		if(!existFile(filename)){
			createFile(filename);
		}
    	openFile(filename);
	}
	
	public void openFile(String filename) throws FileNotFoundException, UnsupportedEncodingException{
		//input = new BufferedReader(new FileReader(filename));
		input = new BufferedReader(new InputStreamReader(new FileInputStream(filename), "utf8"));

	}
	

	public void createFile(String filename) throws IOException{
		f.createNewFile();
	}
	
	public boolean existFile(String filename){
		return f.exists();
	}
	
	public String nextLine() throws IOException{
		row = null;
		if (input.ready()){
			try{
				this.row = input.readLine();
				
				//this.row.replaceAll("\\\\n", "\\n");
				
				String[] workaround = row.split("\\\\\\\\n");
				this.row = workaround[0];
				for(int i = 1; i < workaround.length; i++){
					this.row += "\n";
					this.row += workaround[i];
				}
			}catch(FileNotFoundException e){
				e.printStackTrace();
			}catch(IOException e){
				e.printStackTrace();
			}
		}else{
			throw new IOException();
		}
		String UTF8Str = new String(row.getBytes(),"UTF-8");
		System.out.println(UTF8Str);
		return UTF8Str;
	}
	
	public void closeFile() throws IOException{
		input.close();
	}

	public String getRow() {
		return row;
	}

	public void setRow(String row) {
		this.row = row;
	}

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	public BufferedReader getInput() {
		return input;
	}

	public void setInput(BufferedReader input) {
		this.input = input;
	}

	public File getF() {
		return f;
	}

	public void setF(File f) {
		this.f = f;
	}

}
```

Beim normalen Java-Client hatte ich einen normalen FileReader benutzen können und ich musste auch keinen neuen String erstellen. Im XML-Manifest ist utf-8 als encoding eingetragen. Wo kann da das Problem liegen? :bahnhof:

Grüsse


----------



## schlingel (11. Jun 2012)

Was genau möchtest du machen? Den eingelesenen String ausgeben? Dann ist die Zeile:

```
String UTF8Str = new String(row.getBytes(),"UTF-8");
```

nicht so ganz sinnvoll. Du hast ja schon einen String und wenn row doch nicht UTF-8 als Kodierung hat gibt's Brösel. Warum den String in einen String umwandeln? 

Wenn es darum geht den String dann so rauszuschreiben, mach das beim Code für's Rausschreiben aber nicht beim Einlesen.


----------



## TimeIsTheKey (14. Jun 2012)

schlingel hat gesagt.:


> Was genau möchtest du machen? Den eingelesenen String ausgeben? Dann ist die Zeile:
> 
> ```
> String UTF8Str = new String(row.getBytes(),"UTF-8");
> ...



Hallo

Entschulde, dass ich erst jetzt schreibe. Prüfungen gehabt und keine Zeit gehabt mich mit meinem App zu beschäftigen. Ich habe mich glaube ich ein bisschen zu ungenau ausgedrückt. Das Problem wird mit dem String nicht behoben. Mit der Umwandlung versuche ich den fehlerhaften Read zu beheben, aber nicht mal die Umwandlung per String funktioneirt. Ohne komme ich dementsprechend zum gleichen Resultat. Kann es vielleicht irgendwie daran liegen, dass ich einen eigenen Datei-Typ verwende? Wie gesagt, im Manifest ist UTF-8 drin, beim Read ist UTF-8 drin und beim ausgeben versuche ich eine erneute Konvertiertung, weil es immer noch nicht konvertiert ist (per Debugger überprüft). Könnte es auch ein Bug sein?

Naja, zumindest schonmal vielen Dank für die Antwort. ^^


----------

