ess69 Skrevet 4. september 2006 Del Skrevet 4. september 2006 Heisann. Jeg prøver å få til et veldig lite og enkelt console-program som skal skrive bl.a. noen norske tegn til en ASCII-fil(DOS). Det virker overhode ikke! På skjermen fungerer det omtrent, //console-output: Hei verden Norske tegn: Æ ? Æ Ø ? Ø Å ? Å men til tekstfila blir det søppel, firkanttegn før det jeg ønsker! //test.txt : Original: Hei verden Norske tegn: ├å ┬Æ ├å ├ÿ ┬Ø ├ÿ ├à ┬Å ├à // Encoded: Hei verden Norske tegn: ? ? ? ? ? ? ? ? ? Har sjekka FAQ på http://utvikling.com/cppfaq uten å finne noe relevant. Har også søkt litt og sjekka ut HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSetControl\Nls\CodePage i registry. satt ACP="1252" og OEMCP="850" (var:1252 og 437). Programmet bør helst kunne kjøres på forskjellige Windows-XP-boxer uten å modifisere registry også. Har dere noen tips? using System; using System.Text; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { // Æ \x92 \u00C6 // Ø \x9D \u00D8 // Å \x8F \u00C5 String ts = "Hei verden Norske tegn: Æ \x92 \u00C6 Ø \x9D \u00D8 Å \x8F \u00C5"; Console.WriteLine(ts); System.IO.StreamWriter sw = new System.IO.StreamWriter("test.txt"); sw.WriteLine("Original: " + ts); ASCIIEncoding ascii = new ASCIIEncoding(); Byte[] encodTS = ascii.GetBytes(ts); String tsA = ascii.GetString(encodTS); sw.WriteLine("Encoded: "+tsA); sw.Close(); sw.Dispose(); } } } Er veldig takknemmelig for hjelp! -- Erik S Lenke til kommentar
wolf5 Skrevet 7. september 2006 Del Skrevet 7. september 2006 (endret) String ts = "Hei verden Norske tegn: Æ \x92 \u00C6 Ø \x9D \u00D8 Å \x8F \u00C5"; Console.WriteLine(ts); using (FileStream fs = new FileStream("text.txt", FileMode.Create)) { byte[] outdata = System.Text.Encoding.Default.GetBytes(ts); fs.Write(outdata, 0, outdata.Length); } using (FileStream fs = new FileStream("text2.txt", FileMode.Create)) { byte[] outdata = System.Text.Encoding.ASCII.GetBytes(ts); fs.Write(outdata, 0, outdata.Length); } using (FileStream fs = new FileStream("text3.txt", FileMode.Create)) { byte[] outdata = System.Text.Encoding.UTF8.GetBytes(ts); fs.Write(outdata, 0, outdata.Length); } Pleier å holde meg til System.Text.Encoding.Default. Den funker vel på tvers av XP'er. Endret 7. september 2006 av wolf5 Lenke til kommentar
ess69 Skrevet 8. september 2006 Forfatter Del Skrevet 8. september 2006 Pleier å holde meg til System.Text.Encoding.Default. Den funker vel på tvers av XP'er. Yesss - Det funket! Tusen takk, jeg har lært masse på dette. mvh. Erik S. Lenke til kommentar
Lurifaksen Skrevet 19. september 2006 Del Skrevet 19. september 2006 (endret) Pleier å holde meg til System.Text.Encoding.Default. Den funker vel på tvers av XP'er. Yesss - Det funket! Tusen takk, jeg har lært masse på dette. mvh. Erik S. 6826102[/snapback] Er det en spesiell grunn til at du gjør det så utrolig vanskelig? Dersom målet kun er å opprette en simpel .txt fil kan dette gjøres med 2 linjer: using (StreamWriter log = File.AppendText("log.txt")) log.WriteLine("ÆØÅæøå"); Endret 19. september 2006 av Lurifaksen Lenke til kommentar
wolf5 Skrevet 20. september 2006 Del Skrevet 20. september 2006 Og file output på den koden der gir 14 bytes lang tekst fil med: ÆØÅæøå Om man sjekker log.Encoding egenskapen så sier den UTF-8 og den er read only. Så det er ikke så enkelt som det. Skriving av vanlig tekst til fil krever tungen beint i munnen på Encoding. Skriving av byte[] er enkelt (for man må nemlig bruke Encoding for å transformer String til byte[]). Lenke til kommentar
Lurifaksen Skrevet 20. september 2006 Del Skrevet 20. september 2006 (endret) Edit: Fant ut at det faktisk kan gjøres med én eneste linje i .net 2.0: System.IO.File.AppendAllText("fil.txt", "ÆØÅ fønker jå pærfækt!", Encoding.Default); Det fungerer hvis maskinen har europeisk oppsett. Alternativt kan du hard-kode inn Encoding.GetEncoding("Windows-1252")) Vel.. Jeg kjørte nettopp denne koden: using System; using System.Collections.Generic; using System.Text; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (StreamWriter log = File.AppendText("log.txt")) { log.WriteLine("ÆØÅæøå"); } } } } Og det resulterte i ÆØÅ. Nå skal jeg innrømme at jeg ikke er helt sikker på hva som avgjør formatet på filen, men kan jo hende instillinger i operativsystemet spiller en rolle? Jeg har engelsk OS med regionale instillinger og slikt på norsk. Edit: Ser at notepad og notepad2 viste ÆØÅæøå, mens wordpad og notepad++ viste andre tegn (er ANSI). MEN, i et annet program jeg har laget, hvor jeg bruker nøyaktig samme 2-linjers kode for å skrive til fil, takler den æøå uten problemer, og filen er UTF-8. Antagelig har jeg en instilling i selve programmet et sted da. Men la merke til at hvis du koverterer filen til UTF-8 etter at den er opprettet, vil det fungere fint. Jeg har i alle fall ikke hatt problemer med æøå ved skriving/lesing fra fil - men over web var det litt vanskeligere... Endret 21. september 2006 av Lurifaksen Lenke til kommentar
GeirGrusom Skrevet 22. september 2006 Del Skrevet 22. september 2006 ASCII har æøå, men ikke i riktig rekkefølge (hvis jeg husker riktig) så sortering blir feil. Kan evt. bruke Unicode, så vil det alltid bli riktig. Lenke til kommentar
wolf5 Skrevet 22. september 2006 Del Skrevet 22. september 2006 Unicode ser aldri pent ut i enkle log/txt filer da hver bokstav tar 2 bytes :-) Lenke til kommentar
Manfred Skrevet 26. september 2006 Del Skrevet 26. september 2006 jeg har en studd erfaring med at jeg må bruke UTF7 på innlesing av txt-filer jeg mekker i notepad først... Noen som egentlig har en god forklaring til dette? StreamReader sr = new StreamReader(Server.MapPath("~") + "\\myTextFile.txt", System.Text.Encoding.UTF7); myText.Text = sr.ReadToEnd(); Lenke til kommentar
wolf5 Skrevet 26. september 2006 Del Skrevet 26. september 2006 Vil tro at Encoding.Default også vil fungere fint. Notepad lagrer vel teksten i et UTF7 format kanskje. Den prøver i utgangspunktet å lagre alle bokstaver som 1 byte med data. Dersom du leker deg litt og hiver inn litt andre tegn utenom det vanlige og prøver å lagre så vil du få en melding: "Denne filen inneholder tegn i Unicode-format som vil gå tapt hvis du lagrer filen som en ANSI-kodet tekstfil. Hvis du vil beholder Unicode-informasjonen, klikker du....." Lenke til kommentar
Manfred Skrevet 26. september 2006 Del Skrevet 26. september 2006 Default tar den om du ikke angir noe. Jeg har også forsøkt å angi dette eksplisitt, men det har ikke fungert. UTF7 er den eneste som har klart å gjengi det jeg vil. Lenke til kommentar
DarkSlayer Skrevet 4. oktober 2006 Del Skrevet 4. oktober 2006 tekst er ikke så enkelt altid. Vit derfor hva i huleste du har og skal ha, og hva systemene jobber i. Unicode kommer i litt for mange versjoner, men de 3 vanligste... UTF8, 1 til 4 bytes, alt ettersom UTF16, 2bytes UTF32, 4 bytes de 128 første i unicode er likt som klassisk ascii (inneholder ikke æøå siden det tilhører extended ascii version som er opp til 256 tegn). Unicode støtter alle språk, og windows kjører utf16 i bunn default. Det gjør også java. Derfor bruk unicode. Blir ikke krøll i txtfila om man gjør ting riktig, for de fleste editorer leser .txt filer helt fint om det er ascii eller unicode. Ascii har også mange versjoner .... urk.... 8859-1 er den versjonen som har æøå, og er faktisk ganske default i mange systemer. Vi var heldig med den i motsetning til grekere og andre luringer som er på en annen ascii tabell. CP1252 er et annet navn på 8859-1 ... de er ikke helt like, men spør du java hva i huleste en bestemt text fil er, så sier den gjerne CP1252 istedet for 8859-1 som er det du trudde det var .... ascii suger - slutt å bruke det for f... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå