1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Zeilenumbruch wird als Rechteck angezeigt

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von DalvikCoder, 13.02.2010.

  1. DalvikCoder, 13.02.2010 #1
    DalvikCoder

    DalvikCoder Threadstarter Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    0
    Registriert seit:
    22.01.2010
    Hi Leute,

    ich habe ein Problem. Ich habe es mittlerweile hinbekommen. Textdateien im Assets-Ordner mitzugeben und den Text auszulesen.
    Funktioniert alles ganz gut, auch obwohl es ein Sonderzeichensatz ist ISO-8859-2.

    Was mich aber stört und wo ich dran scheitere ist der Zeilenumbruch. Die Entertaste bzw. der Zeilenumbruch in der normalen Textdatei wird im EditText-View als Rechteck dargestellt, aber der Zeilenumbruch funktioniert auch. Nur sieht das Rechteck am Ende echt Sch..... aus.

    Kennt einer von euch das Problem bzw. eine Lösung dafür?

    Danke im voraus

    Gruß
    Murat
     
  2. garak, 13.02.2010 #2
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,795
    Registriert seit:
    12.12.2009
    Würde ja gerne helfen, aber dazu bedarf es schon einiger Informationen: Was ist das für eine Datei, wer schreibt sie und womit, was ist dein Quellcode etc.

    Gruß
    Chris
     
  3. DalvikCoder, 13.02.2010 #3
    DalvikCoder

    DalvikCoder Threadstarter Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    0
    Registriert seit:
    22.01.2010
    Es ist eine ganz normale Textdatei die ich lesend öffne mit folgendem Code
    Wobei wir einfach mal auf auf die Trys und Exception nicht achten bzw. auf die Struktur. Ist nur so ein erster Wurf :)

    Danke im voraus


    Code:
    [SIZE=2][LEFT]String[] [U]files[/U] = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]null[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]; 
    
    AssetManager assetManager = getAssets();
    
    InputStream inputStream = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]null[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]; 
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] { 
    inputStream = assetManager.open([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"001.txt"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],2); 
    } 
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (IOException e) { 
    Log.[I]e[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"tag"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], e.getMessage()); 
    } 
    String s;
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] {
    s = readTextFile(inputStream);
    [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]secondField[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = (EditText) findViewById(R.id.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]EditText01[/I][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);
    [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]secondField[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].setText(s); 
    } [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (UnsupportedEncodingException e) {
    [/SIZE][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]// [/COLOR][/SIZE][/COLOR][/SIZE][B][SIZE=2][COLOR=#7f9fbf][SIZE=2][COLOR=#7f9fbf]TODO[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f] Auto-generated catch block[/LEFT]
    [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][LEFT]e.printStackTrace();
    } 
    }
    
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]private[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] String readTextFile(InputStream inputStream) [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]throws[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] UnsupportedEncodingException { 
    ByteArrayOutputStream outputStream = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ByteArrayOutputStream(); 
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]byte[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] buf[] = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]byte[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][8192]; 
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] len; 
    
    
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] { 
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]while[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ((len = inputStream.read(buf)) != -1) { 
    outputStream.write(buf, 0, len);
    
    } 
    outputStream.close(); 
    inputStream.close(); 
    } 
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (IOException e) { 
    } 
    String str = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] String(buf, [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"iso-8859-9"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]); [/SIZE][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]// for UTF8 encoding [/LEFT]
    [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][LEFT]str.replace([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]". "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"\n"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]return[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] str.toString(); [/LEFT]
    } 
    [/SIZE]
     
  4. garak, 13.02.2010 #4
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,795
    Registriert seit:
    12.12.2009
    In welcher Zeichenkodierung liegt die Textdatei vor?

    Der gängige Weg eine Datei bestimmter Codierung einzulesen ist dieser:

    Code:
    InputStream reader = new InputStreamReader(new FileInputStream(filename),”UTF-8″);
    BufferedReader br = new BufferedReader(reader)); String line = null;
     while((line= br.readLine())!=null)
    ...
    
     
    Zuletzt bearbeitet: 13.02.2010
  5. DalvikCoder, 13.02.2010 #5
    DalvikCoder

    DalvikCoder Threadstarter Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    0
    Registriert seit:
    22.01.2010
    Das erkenne ich nirgends. Sie beinhaltet aber verschiedene Sonderzeichen aus der türkischen Sprache z.B. â oder î
    Mit der normalen Codierung wurde mir kompletter Blödsinn angezeigt mit der iso-8859-9 zeigt er mir wenigstens die Zeichen richtig an.
     
  6. garak, 13.02.2010 #6
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,795
    Registriert seit:
    12.12.2009
    Dann verwende den Zeichensatz doch mal in meinem angegebenen Beispiel. Eine weitere Empfehlung wäre die Datei mit JEdit zu öffnen und herauszufinden, in welchem Zeichensatz sie codiert ist. Wenn JEdit es nicht selbst erkennt, kannst du dort die Codierung manuell wechseln und findest es so vielleicht heraus.
     
    DalvikCoder bedankt sich.
  7. DalvikCoder, 13.02.2010 #7
    DalvikCoder

    DalvikCoder Threadstarter Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    0
    Registriert seit:
    22.01.2010
    Das war ein Supertip mit dem JEdit. Die Codierung war soweit in Ordnung, nur war der Zeilenumbruch bzw. der Lineseperator falsch. Eingestellt war Zu finden unter --> Utilities --> Buffer Options.

    Drin stand Dos/ Windows (\r\n) und richtig geht es mit Unix (\n). Ich vermute das \r war das Rechteck, was zu viel war. Der Zeilenumbruch hatte ja funktioniert nur war das Rechteck zuviel-

    Cooles Tool. Danke!

    Gruß
    Murat
     

Diese Seite empfehlen