Så nogen forslag til hvordan det kan gøres? Går ud fra at der skal bruges en Replace funktion, men er lidt i tvivl om hvordan det gøres, og om det kan bruges når man henter dataene fra en csv-fil...
hvis man kigger i Excel, så er de forkerte, men hvis du åbner den i Notepad, så bliver tegnene rigtige. Jeg har prøvet at gemme filen som .txt og så hente den derfra, men det har heller ikke hjulpet når det først bliver skrevet ud.
du har en CSV fil der skal importeres til excel. Når du åbner filen i excel, så bliver specialtegn, som fx €, ö ol., vist som € og Ö. Det du har problemer med er at præsentere specialtegn i Excel når du importerer fra en CSV ?
JA og NEJ. Jeg åbner og kigger i den i Excel, men det er bare for at se hvad der er i. Jeg er egenligt fuldstændig ligeglad med hvordan den ser ud i Excel. Men jeg finder det interessant, at den i Excel ikke kan vise tegnene, mens den godt kan i Notepad. Og at den så ikke kan på min asp-side. Det jeg i bund og grund gerne vil, er at have vist €-tegnet, og de andre special-tegn, korrekt på min asp-side.
ahh ... oki ... gidder du så lige at poste nogle linjer fra din CSV (hvor der er nogle specialtegn) + den kode du bruger til at hive data ud med ? (ikke post hele .asp siden ... kun de par linjer der hiver teksten ud og skriver den ud på din side ;-) )
nu er jeg ikke den helt store encoding-haj, så det kan godt være at denne løsning er lidt overkill. Umiddelbart ville jeg tro at hvis din CSV-fil var UTF-16 encodet, så ville det ikke være det store problem. Men ...jeg har brugt den tidligere til tilsvarende problemstilling, men jeg har igen kun kigget på en allerede eksisterende løsning ... desværre er det lidt arbejd at lave for at den skal fungere ... here it goes:
Derefter laver du en array med tilsvarende HTML-værdier: Dim arrHTMLChar(2) arrHTMLChar(1) = "€" arrHTMLChar(2) = "é"
Derefter laver du en lille funktion der replacer dine specialtegn:
Function ReplaceBadChars( str ) for i = 1 To UBound( arrSpecialChars ) str = Replace( str, arrSpecialChars( i ), arrHTMLChars( i ) next ReplaceBadChars = str End Function
Som du kalder fra din ASP kode:
Response.Write("<tr class='row2'>") For ArrayIndex = 1 to ubound(myLocalFields,1) Response.Write("<td>" & server.HTMLEncode( ReplaceBadChars( myLocalFields(ArrayIndex) ) ) & "</td>") Next Response.Write("</tr>" & vbCrLF)
Kan godt se hvad du mener. Det er ikke noget jeg lige får tid at kigge på ny. Man når jo aldrig at blive færdig med noget, før der kommer nye hastesager på bordet. Men det er i hvert fald et forsøg hver. Indtil videre så skal du have tak for hjælpen...
Public Function ReplaceBadChars(str) for i = 1 To UBound(arrSpecialChars,1) str = Replace(str, arrSpecialChars(i), arrHTMLChars(i)) next ReplaceBadChars = str End Function
og så længere nede i koden kalder jeg function'en sådan her:
OutputField = ReplaceBadChars(OutputField)
Hvis jeg har array'ene "sat til", så får jeg følgende fejl:
Der opstod en Microsoft VBScript-kompileringsfejl fejl '800a03ea'
Der er en syntaksfejl
aspfil.asp, linje 139
arrSpecialChars(1) = "€" ^
Kommenterer jeg dem ud får jeg til gengæld den her fejl: Der opstod en Microsoft VBScript-kørselsfejl fejl '800a000d' Typer stemmer ikke overens: 'ubound'
Public Function ReplaceBadChars(str) dim i for i = 0 To UBound(arrSpecialChars,1) str = Replace(str, arrSpecialChars(i), arrHTMLChars(i)) next ReplaceBadChars = str End Function
hmm ... underlig :-s den samme kode fungerer jo helt fint hos mig. Jeg tror ikke det har noget med at du har koden liggende i en class. det skal være ligegyldig.
men ... for "sjov". kan du ikke gøre om denne linje:
arrSpecialChars(0) = "€"
til
arrSpecialChars(0) = "xxx"
og se om du stadig får fejl ?
hvis du stadig får fejl, så må det være noget andet der er galt. du kan jo prøve at sende mig koden og en tekstfil, så skal jeg kigge på det: knut@xperimentum.com
Jeg får stadigvæk fejl efter at have lavet arrSpecialChars om. For sjov prøvede jeg at udkommentere de to arrays, samt den nederste linie "OutputField = ReplaceBadChars(OutputField)" og så lavede jeg den her for at teste:
"OutputField = Replace(OutputField,"f","W")" Den er der ingen problemer med, den erstatter fint f med W. Altså er der et eller andet med de Arrays, der gør at det ikke fungerer...
Jeg ved ikke lige om jeg har tilladelse til at sende koden ud af huset her, så det må jeg hellere lige vente med...
Jeg har fundet en midlertidig løsning. Jeg fandt jo ud af, at jeg godt kunne køre en enkelt linie Replace, så nu har jeg bare lavet en masse af dem, sådan her:
Det må jo så fungere indtil jeg finder noget mere smart. Men på den anden side, hvis jeg alligvel skal ind og tilføje en ny ting i hver array, for hver nyt tegn jeg støder på, plus jeg har functionen til at stå. Så giver det her jo egenligt mindre kode når det kommer til stykket. Men hvor "pæn" kodning det så er, kan så diskuteres. Det fungere i hvert fald nu.
Hvis du smider et svar nute, så får du nogle points som tak for hjælpen...
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.