Avatar billede simsen Mester
09. januar 2012 - 09:41 Der er 4 kommentarer og
1 løsning

æ ø og å ved læsning af csv fil

Hej,

Jeg har forsøgt mig med, hvad Janus gav mig i eksempel for at skrive til en csv fil (som virker nu), til at gøre det samme, når jeg læser fra en csv. Men af en eller anden grund, så læser den bare ikke æ, ø og å.

Min csv fil ser ud som følgende (åbnet med notepad):
1000,Louise JensenæÅ,1,1234,Ja
1001,Jens Peter Lyngby Hansen,1,1234
1002,Lars Nielsen,2,1234,Nej
1003,JesperJørgensen,1,1234
1005,Kenneth Schmidt,2,1234

Og min metode til at indlæse det til en datatable:

DataTable table = null;

            if (fileName != null && !fileName.Equals(string.Empty) && File.Exists(fileName))
            {
                try
                {
                    FileInfo info = new FileInfo(fileName);
                    string tableName = info.Name;

                    List<string> rows = new List<string>();

                    using (var reader = new System.IO.StreamReader(fileName, Encoding.UTF8))
                    {
                        string record = reader.ReadLine();
                        while (record != null)
                        {
                            rows.Add(record);
                            record = reader.ReadLine();
                        }

                        List<string[]> rowObjects = new List<string[]>();

                        int maxColsCount = 0;
                        foreach (string s in rows)
                        {
                            string[] convertedRow = s.Split(new char[] { separator });
                            if (convertedRow.Length > maxColsCount)
                                maxColsCount = convertedRow.Length;
                            rowObjects.Add(convertedRow);
                        }

                        table = new DataTable(tableName);
                        for (int i = 0; i < maxColsCount; i++)
                        {
                            table.Columns.Add(new DataColumn());
                        }

                        foreach (string[] rowArray in rowObjects)
                        {
                            table.Rows.Add(rowArray);
                        }
                        table.AcceptChanges();
                    }
                }
                catch
                {
                    throw new Exception("Fejl i læsningen af filen. Filen er muligvis åbnet i et andet program.");
                }
            }
            else
            {
                throw new FileNotFoundException("Filen blev ikke fundet.");
            }
            return table;

Når jeg laver en "run to curser", kan jeg se at i

string record = reader.ReadLine();

så har den ændret æÅ til to spørgsmålstegn:
"1000,Louise Jensen&#65533;&#65533;,1,1234,Ja"

Nogen der kan fortælle mig hvad det er jeg gør forkert?
Avatar billede runesoft Nybegynder
09. januar 2012 - 09:48 #1
Din fil er ikke gemt i UTF-8.

Fra Notepad, vælg at gemme den som UTF-8 eller specificer den encoding filen er i i dit program
Avatar billede simsen Mester
09. januar 2012 - 09:53 #2
Hej Rune,

Det er korrekt - men i mit tilfælde er det sådan, at jeg ikke har nogen som helst indflydelse på filen. Det er en fil, som et andet program genererer (og nej lige nu, jeg er ikke engang sikker på, at den gemmer det i ANSI format).

Det jeg tænker på er, er der en måde at konvertere på (når jeg engang får at vide, hvilket format programmet gemmer i) i mit program så jeg altid får vist det som UTF8 (og dermed får mine æ, ø og å'er vist korrekt)?
Avatar billede runesoft Nybegynder
09. januar 2012 - 10:14 #3
i linien 
using (var reader = new System.IO.StreamReader(fileName, Encoding.UTF8))

skal du indsætte den encoding din fil er gemt i. Der er desværre ikke nogen auto detection af encoding så du bliver nødt til finde ud af din encoding først. hvis du prøver at gemme filen fra notepad mener jeg den vil defaulte til den oprindelige encoding og du kan se det der.
Avatar billede simsen Mester
09. januar 2012 - 13:29 #4
Det har du fuldstændig ret i man kan....Mit problem er bare, at ovennævnte skulle køre pr. automatik. Der er ikke andet for, at jeg må forlange at de encoder ens hver gang, så jeg er klar over hvilken format de kører.

Tak for dit svar :-)
Avatar billede runesoft Nybegynder
09. januar 2012 - 14:06 #5
Du kunne evt. prøve at søge filen igennem for bestemte bytekombinationer, men du må nok alligevel acceptere en fejlrate.

Du kan forøvrigt heller ikke være garanteret at din csv er komma separeret, den kan f.eks. sagtens være semikolon separeret.

Men at kræve den samme encoding hver gang virker ikke som et urimeligt krav
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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