Avatar billede fessoor Nybegynder
28. december 2006 - 17:23 Der er 11 kommentarer

File name encoding

På en MAC har jeg problemer med file name encoding når jeg bruger File.list(). Problemet sker ved brug af et "å".

java.io.File f = new java.io.File("/Users/.../shared/å.txt");
f.createNewFile();
f = new java.io.File("/Users/.../shared");
System.out.println(f.list()[0]);
System.out.println(f.list()[0].length()+"");

Her skriver java så
å.txt
6

Den skulle jo gerne være
å.txt
5

Jeg kan ikke se at jeg eksplicit skal sætte nogen encoding. Det bør JRE styre for mig.
Avatar billede arne_v Ekspert
28. december 2006 - 17:36 #1
det lyder som din source er i UTF-8 men at dit system er i ISO-8859-1
Avatar billede fessoor Nybegynder
28. december 2006 - 17:37 #2
Mac'en kører MacRoman, men det burde vel stadigvæk virke.
Avatar billede fessoor Nybegynder
28. december 2006 - 17:38 #3
arne_v

Man skal jo ikke kode specielt bare fordi styresystemet ikke kører utf-8. Jeg kan jo heller ikke angive nogen encoding når jeg arbejder med en java File (altså til filnavnet)
Avatar billede arne_v Ekspert
28. december 2006 - 17:47 #4
nej, men du skal sikre dig at du gemmer din Java source fil i det rigtige
karakter saet
Avatar billede arne_v Ekspert
28. december 2006 - 17:48 #5
evt. kan du proeve at angive karakter saet naar du koerer programmet

java -Dfile.encoding=xxxxx Program

men det burde ikke vaere noedvendigt
Avatar billede fessoor Nybegynder
28. december 2006 - 17:54 #6
Encoding i kildekoden er god nok.

System.out.println("å.txt".length());

giver 5.
Avatar billede fessoor Nybegynder
28. december 2006 - 18:02 #7
Hvis jeg ser filens navn igennem OSX så hedder den også pænt "å.txt"
Avatar billede fessoor Nybegynder
28. december 2006 - 18:46 #8
Hmm.. Her komme et lille program som kører fint på Windows men ikke på OSX. Det viser at OSX ikke kan finde den fil den lige har oprettet, hvis den indeholder et å.

public class Test
{

    public static void main(String []args)
    {
        try
        {
            String filename = "å.txt";
            //String folder = "/Users/.../shared/1/";  //OSX
            String folder = C:\\"; //Win

            java.io.File f = new java.io.File(folder + filename);
            f.createNewFile();
            f = new java.io.File(folder);
           
            boolean found = false;
           
            String[] files = f.list();
            for (int i=0; i<files.length; i++)
            {
                if (files[i].equals(filename))
                    found = true;   
            }
       
            System.out.println("found : " + found);
               
        }
        catch (Exception ex)
        {
            System.out.println(""+ex);
        }
    }
   
}
Avatar billede fessoor Nybegynder
28. december 2006 - 19:59 #9
Det underlige er jo at filen bliver oprettet, og at OSX viser den rigtigt.
Avatar billede fessoor Nybegynder
28. december 2006 - 21:49 #10
Hmm det bliver mere og mere mystisks.

Følge kode tester æ,ø,å og nogen meget udenlandske bogstaver http://www.tbray.org/ongoing/When/200x/2003/04/26/Examples.png

Å er det eneste der giver problemer i OSX. Windows finder dem alle sammen.

public class Test
{

    public static void main(String []args)
    {
        try
        {   
            String arr[] = {
                    "\u0026\u0416\u4E2D\u10346"    //http://www.tbray.org/ongoing/When/200x/2003/04/26/UTF
                    ,"\u00C5" //AA
                    ,"\u00d8" //OE
                    ,"\u00E6" //AE
                    };
            for (int i = 0; i<arr.length; i++)
            {
                String filename = arr[i];
                String folder = "/Users/.../shared/1/";
                java.io.File f = new java.io.File(folder + filename);
                f.createNewFile();
                f = new java.io.File(folder);
               
                boolean found = false;
               
                String[] files = f.list();
                for (int j=0; j<files.length; j++)
                {
                    if (files[j].equals(filename))
                        found = true;
                       
                }
           
                System.out.println(arr[i] + " : " + found);
            }
               
        }
        catch (Exception ex)
        {
            System.out.println(""+ex);
        }
    }
}
Avatar billede arne_v Ekspert
29. december 2006 - 04:33 #11
hm - jeg er noget handicappet af at jeg ikke har en Mac ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester