Avatar billede davidfossil Nybegynder
07. marts 2005 - 21:34 Der er 19 kommentarer og
1 løsning

Encoding der driller

Jeg bruger følgende kode til at lave nogle .aspx filer til visning på en webserver:

using(StreamWriter writer = File.CreateText(strFileName))
{
    writer.Write("æøå");
}

Ifølge dokumentationen skulle File.CreateText() lave en UTF-8 encoded text fil, men jeg er lidt i tvivl om hvad den faktisk laver.

Når jeg åbner den generede fil i en browser (Firefox eller IE), er de danske bogstaver nemlig blevet til noget i stil med dette: æøå

Uanset hvilken encoding jeg vælger client side (View > Encoding) bliver bogstaverne ikke danske. Som standard vælger begge clienter da også UTF-8, som specificeret i min web.config

Nogen der har et forslag?
Avatar billede arne_v Ekspert
07. marts 2005 - 21:39 #1
æøå ligner absolut UTF-8

UTF-8 som bliver fortolket som ISO-8859-1 altså
Avatar billede a1a1 Novice
07. marts 2005 - 21:43 #2
brug UTF-7
eller
system.encoding.default (mener jeg den hedder) (sætter den til din servers default, hvilket burde være DK)

;o)
Avatar billede a1a1 Novice
07. marts 2005 - 21:44 #3
dvs., noget ala:
using(StreamWriter writer = File.CreateText(strFileName, system.encoding.default ))
{
    writer.Write("æøå");
}
Avatar billede arne_v Ekspert
07. marts 2005 - 21:46 #4
System.Encoding.Default er ISO-8859-1 (kaldet CP-1252 på Microsoftsk) ikke UTF-7
Avatar billede brynil Nybegynder
07. marts 2005 - 21:46 #5
Jeg har lige være ude for et lignende problem, ikke helt det samme, men måske. Uanset hvilken encoding jeg brugte viste IE ikke de rigtige tegn. Heller ikke efter sprogområde indstillinger blev ændret i IE.
Det viste sig, at hvis jeg gemte filen fra Notepad med encoding Unicode istedet for som standard ANSI, så var der ingen problemer.
Avatar billede davidfossil Nybegynder
07. marts 2005 - 21:52 #6
arne > men hvor sker så denne fejl-fortolkning? begge browsere påstår jo at det er en utf-8 fil de ser, men der er alligvel sære tegn.

a1 > tester lige dit forslag. Dog skal det der faktisk sendes til brugeren helst være utf-8.
Avatar billede davidfossil Nybegynder
07. marts 2005 - 21:54 #7
brynil > nu skal filen bare gemmes af et .NET (console) program, der generere de statiske .aspx filer til mit site.
Avatar billede arne_v Ekspert
07. marts 2005 - 21:56 #8
Ja men tror ASP.NET at den .aspx fil du skriver er i UTF-8 ?
Avatar billede brynil Nybegynder
07. marts 2005 - 21:56 #9
davidfossil > Jeg ved det. Jeg vil selv meget gerne have en løsning der overflødiggør en extra save. Forskellen undrer mig bare, da jeg jo ikke ændrede i koden.
Avatar billede davidfossil Nybegynder
07. marts 2005 - 22:04 #10
Hmmmmmm ... jeg kan se nu at når jeg åbner en af filerne i notepad og gemmer den som IKKE utf-8 (ISO-8859-1), så fungerer det. Tror det er ASP.NET der prøver at være smart, ved at oversætte ISO-8859-1 til UTF-8 før afsending af data. Det virker bare ikke når filerne faktisk er UTF-8 i forvejen...
Avatar billede arne_v Ekspert
07. marts 2005 - 22:04 #11
Prøv:

<%@ Page Language="C#" CompilerOptions="/codepage:1252"%>
Avatar billede davidfossil Nybegynder
07. marts 2005 - 22:08 #12
a1 > der er ingen overloads til File.CreateText() ...
Avatar billede arne_v Ekspert
07. marts 2005 - 22:08 #13
vrøvl - den vil jo netop sætte til ISO-8859-1
Avatar billede arne_v Ekspert
07. marts 2005 - 22:10 #14
StreamWriter writer = new StreamWriter(strFileName, true, Encoding.Default)

og den kan godt sende UTF-8 ud til client selvom source er i ISO-8859-1
Avatar billede davidfossil Nybegynder
07. marts 2005 - 22:13 #15
arne (22:04:48) > ingen forskel...
Avatar billede davidfossil Nybegynder
07. marts 2005 - 22:18 #16
arne (22:10:43) > det ser ud som om der gemmes utf-8 filer lige meget hvad... ?
Avatar billede davidfossil Nybegynder
07. marts 2005 - 22:35 #17
Jeg har vist fundet løsningen nu.
Udover at sætte responseEncoding og requestEncoding i web.config, skal man også have sat fileEncoding="utf-8" for at få ASP.NET til at æde de filer der er faktisk er gemt i UTF-8.

Min web.config skal altså indeholde følgende:

<globalization
    fileEncoding="utf-8"
    requestEncoding="utf-8"
    responseEncoding="utf-8"
/>

arne > smid et svar, du gav mange gode forslag og ledte mig den rigtige vej.
brynil > håber at du kan bruge min opdagelse til noget :)
Avatar billede arne_v Ekspert
07. marts 2005 - 22:37 #18
ok
Avatar billede jokkejensen Novice
07. marts 2005 - 22:38 #19
er det ikke bare bruge Server.HtmlEncode ?


String TestString = "ÆØÅ"
StringWriter writer = new StringWriter();
Server.HtmlEncode(TestString, writer);
String EncodedString = writer.ToString();
Avatar billede davidfossil Nybegynder
08. marts 2005 - 07:18 #20
jokke > Server.HtmlEncode var vel sådan set også en mulighed, men jeg er klart mere tilfreds med en løsning hvor ø hedder ø og å hedder å ;) Ellers tak for forslaget!
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