Eclipse och Text encoding

Diskussion i 'Frågor, support och diskussion' startad av chrotto, 14 sept 2011.

  1. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Har ett märkligt problem med Eclipse och hur våra svenska tecken hanteras.
    I min app skall jag läsa en textfil och sätta upp den i en TextView.
    Funkar helt o.k. med undantag av att den inte kan skriva ut de svenska tecknen.

    För att avgränsa problemet testade jag en ren java-applikation från min Java bok (Java in 24 hours). Applikationen läser texten från en textfil och skriver den, efter en förändring, dels till Eclips Console och även tillbaks till samma textfil.
    Den sätter då upp texten rätt på Consolen men skriver skräp istället för svenska tecken till filen.
    Har testat versionerna 3.6.2, 3.7 och EE IDE. Har också dribblat en del med inställningarna i Eclipse. Default anger den Cp1252. Har bytt till UTF-8 men det funkar inte heller. Har ställt frågan till eclipse.org. Många har läst den men ingen har svarat. Finns det någon därute som har haft liknande problem vore jag hemskt tacksam om ni hörde av er. Har ni dessutom lösningen blir jag ju jätteglad.

    /Christer
     
  2. DreamHawk

    DreamHawk Android Medlem

    Blev medlem:
    28 maj 2010
    Inlägg:
    6 064
    Mottagna gillanden:
    419
    Operatör:
    Tele2
    Telefon:
    iPhone 7

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    iPhone 7
    ROM:
    IOS11
    Telefon 2:
    Google Galaxy Nexus
    ROM:
    LineageOS
    Har du sparat textfilen i utf8? Eller i Ansi?

    Kolla detta först :)

    Sent from my Nexus S using Tapatalk
     
    chrotto gillar detta.
  3. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Funkar inte i något fall. Just nu ser det dock ut som att det blir skit i båda ändar (Console och fil)
    /Christer
     
  4. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Visade sig att det var i EE-varianten som det blev skit i båda ändar.
    Körde det nu i 3.6.2 som jag normalt använder. Då blir texten ok till Console men skit till fil oberoende av UTF-8 eller Ansi i textdokumentet.
    Har också testat både UTF-8 och Cp1252 (default) i Project properties.
     
  5. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Kan du posta koden som du använder för att skriva till filen? Det låter ju som att något är fel där.
     
  6. DreamHawk

    DreamHawk Android Medlem

    Blev medlem:
    28 maj 2010
    Inlägg:
    6 064
    Mottagna gillanden:
    419
    Operatör:
    Tele2
    Telefon:
    iPhone 7

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    iPhone 7
    ROM:
    IOS11
    Telefon 2:
    Google Galaxy Nexus
    ROM:
    LineageOS
    När jag importerade en databas, som jag skapat efter en CSV-fil, fick jag konstiga krumelurer för att CSV-filen var sparad i ANSI, när jag sedan sparade om den som UTF-8, så gick det bra att kopiera in den i appen och få med ÅÄÖ, utan att ha gjort något speciellt i koden... Har inga UTF-8encoding statements eller något nånstans.
     
    chrotto gillar detta.
  7. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Koden

    Här kommer koden till den enkla Java-snutten
    Kolla vad som händer i utdatafilen.

    import java.io.*;
    import java.util.*;

    class Configurator {

    Configurator() {
    try {
    // load the properties file
    File configFile = new File("c:\\java\\test.txt");
    FileInputStream inStream = new
    FileInputStream(configFile);
    Properties config = new Properties();
    config.load(inStream);
    // create a new property
    Date current = new Date();
    config.setProperty("runtime", current.toString());
    // save the properties file
    FileOutputStream outStream = new
    FileOutputStream(configFile);
    config.store(outStream, "c\\java\\properties_settings.txt");
    inStream.close();
    config.list(System.out);
    } catch (IOException ioe) {
    System.out.println("IO error " + ioe.getMessage());
    }
    }

    public static void main(String[] arguments) {
    Configurator con = new Configurator();
    }
    }
     
  8. ozp

    ozp Teen Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    250
    Mottagna gillanden:
    31

    MINA ENHETER

    Jag har testa din kod på en Arc. Om jag lägger till åäö i comment så skrivs de till filen som åäö. Lägger jag till åäö i en propery så skrivs de som \u00e5\u00e4\u00f6

    Notera också att om filen inte finns så kommer inte koden att köras.
     
    chrotto gillar detta.
  9. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Testa att wrappa din FileOutputStream i en OutputStreamWriter, så kan du speca encoding i konstruktorn. Eftersom store() även kan ta en writer som parameter, så kan du testa att ersätta detta

    Kod:
    FileOutputStream outStream = new
    FileOutputStream(configFile);
    config.store(outStream, "c\\java\\properties_settings.txt");
    
    med

    Kod:
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
    			    new FileOutputStream(configFile), "UTF-8"));
    config.store(out, "c\\java\\properties_settings.txt");
    
    Har inte testat själv, men det borde fungera tycker jag.
     
    chrotto gillar detta.
  10. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Se tyvärr inge skillnadnär jag läger in UTF-8.
    /Christer
     
  11. DreamHawk

    DreamHawk Android Medlem

    Blev medlem:
    28 maj 2010
    Inlägg:
    6 064
    Mottagna gillanden:
    419
    Operatör:
    Tele2
    Telefon:
    iPhone 7

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    iPhone 7
    ROM:
    IOS11
    Telefon 2:
    Google Galaxy Nexus
    ROM:
    LineageOS
    Testa denna textfilen?
     

    Bifogade filer:

    • test2.txt
      Filstorlek:
      6 bytes
      Visningar:
      62
  12. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Det står ju faktiskt följande att läsa om klassen Properties i javadoc:
    "When saving properties to a stream or loading them from a stream, the ISO 8859-1 character encoding is used. For characters that cannot be directly represented in this encoding, Unicode escapes are used; however, only a single 'u' character is allowed in an escape sequence. The native2ascii tool can be used to convert property files to and from other character encodings."

    Dvs precis som ozp skrev ovan så kommer åäö att sparas som \u00e5\u00e4\u00f6.
     
  13. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Ser att det var ett dumt val ex.
    Här kommer ett androidexempel.
    Läser en text och skickar det till en TextView:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;

    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.widget.TextView;

    public class ReadrxrNyActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TextView helloTxt = (TextView)findViewById(R.id.hellotxt);
    helloTxt.setText(readRawTextFile(this,R.raw.hello));
    }


    public static String readRawTextFile(Context ctx, int resId)
    {
    InputStream inputStream = ctx.getResources().openRawResource(resId);

    InputStreamReader inputreader = new InputStreamReader(inputStream);
    BufferedReader buffreader = new BufferedReader(inputreader);
    String line;
    StringBuilder text = new StringBuilder();

    try {
    while (( line = buffreader.readLine()) != null) {
    text.append(line);
    text.append('\n');
    }
    } catch (IOException e) {
    return null;
    }
    return text.toString();
    }
    }
     
  14. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Löst

    Upptäckte nu att denna kod funkar om jag sparar i UTF-8.
    Har nog slarvat i mina tester.
    Tack alla för era ansträngningar!
    /Christer