Jag har problem med baltiska tecken som visas korrekt på en webbsida med "Baltiska (Windows)" som teckenkodning, men som i Access-databasen ligger med "fel" tecken. Se bifogade filer.
Tecken är inlagda med rätt tecken, dvs Access har själv bytt tecken.
Databasen är sorterad enligt svensk/finsk, om det har någon betydelse. Testade med andra, men det blev samma sak.
Webbsidan har inte charset eller liknande språkinställningar för att visa rätt tecken, vi i Sverige måste ställa om det manuellt för att se tecknen rätt.
När jag exporterar till en csv-fil från databasen, och sedan väljer att öppna filen i Excel, förstår programmet att det är "Filursprung: 1257 : Baltic (Windows)", och tecknen importeras rätt.
Jag har googlat, och har installerat TextPipe Pro, som ska kunna konvertera texter mellan alla teckenformat. Jag tycker det är konstigt att jag inte kan åstadkomma något så grundläggande?
Hur får jag tecknen i csv-filen att visas som korrekta tecken, så att jag kan importera datan i ett system som inte förstår vilken teckenkodning det är?
Eller hur ska jag göra för att få rätt på det, den enkla frågan?
Jag kan göra om csv-filerna hela vägen från Access, om det behövs.
Tecknen är rätt i csv-filen, men du måste ju ange att teckenkodningen är Windows-1257. Anger du inte teckenkodning så används den som är default, och på svenska Windowsburkar är ju det Windows-1252, och då ser det ut som det gör i din skärmdump på csv/Access.
Så allt du behöver göra är att tala om att det är Windows-1257.
Det låter perfekt, så enkelt borde det ju vara!
Men, hur, och var gör jag det?
Importfunktionen kan jag inte påverka, då den även används även för icke-baltiska språk, dvs jag söker en automatisk igenkänning, om lösningen ligger i din riktning.
Inga tecken ändras när du exporterar/importerar utan det handlar om att när du ska visa en text så måste du alltid tala om för datorn vilken teckenkodning den är i för att tecknen ska bli rätt.
I html talar man om det med <meta http-equiv="Content-Type" content="text/html; charset=windows-1257">.
I xml skriver man: <?xml version="1.0" encoding="windows-1257"?>
I textfiler (och csv som också är en textfil) kan man inte tala om det.
Om du konverterar mellan olika format (exempelvis med det där TextPipePro) så kommer tecknen att ändras, men det hjälper inte dig eftersom du vill använda tecken som inte finns i Windows-1252 och då går det ju inte att konvertera dit.
I vilket sammanhang är det som du ska visa det dit du importerat csv-filen?
Tydal:
Testade med charset på min text, och det blir rätt tecken, precis som det ska.
Problemet är att i det nya publiceringssystemet är charset satt till utf-8, och då blir det fel. :(
Texterna ska publiceras på webben.
Har tänkt mer på ditt första svar, du menar alltså att tecken ÄR rätt, men eftersom jag inte har rätt charset, visas fel?
Jämför med att om man inte har rätt font, blir det defaultfonten, tex Courier.
OM jag nu förstår, kan man ändra charset fram- och tillbaka utan andra problem? Och var gör man det?
Om du måste köra med UTF-8 så måste du konvertera texterna.
Unicode (UTF-16) är lite speciellt eftersom det kan använda mer än en byte per tecken. Eftersom processorer lagrar bytes på olika sätt (little endian/big endian) behöver man tala om på vilket sätt aktuell fil är sparad. Därför använder man BOM (Byte Order Mark) för att visa detta. Det består av talet 0xFEFF.
UTF-8 är dock en variant av unicode där bara specialtecknen lagras med fler än en byte per tecken. Här behöver man ingen byte order mark, men Windows brukar använda det ändå för att belysa att filen är UTF-8. I detta fall består den av talet 0xEFBBBF.
Det går som sagt inte att tala om vilken teckenkodning en textfil är i, men program som kan hantera Unicode tolkar 0xEFBBBF i början av textfil som ett tecken på att det är UTF-8.
Om du måste köra med UTF-8 så måste du konvertera texterna.
Då är vi tillbaka där vi började. :)
Testade programmet igen; kom tack vare dig på att jag ju testkört med text som klistrat in, dvs den har ju varit felaktig, eftersom jag öppnat filen.
Tänkte köra utan den testen, men man kunde kopiera in texten via programmet för en test, vilket visade exakt samma. När jag sedan körde det, test eller skarpt, blev det fel, dvs tecknen blev inte korrekta. :(
MEN!
Jag kom på att de kanske inte VISAS korrekt när jag öppnar filen, eftersom jag ju INTE har utf-8 på datorn!
Klistrade in tecknen i HomeSite, med utf-8, och vips, KORREKT!
Återstår att testa på rätt sätt.
Måste även lösa hur radbrytningar ska ersättas; de utförs nämligen i csv-filen, och bryter ned texten på ny rad. Borde ju ligga kvar som vbcrlf, tycker jag. Råd om det, innan jag testar?
Har en sida som är tillgänglig på fyra språk, det är:
- Svenska
- Engelska
- Hollänska
- Japanska
Därför har jag språkfiler (XML-Filer) som laddas in beroende på vilket språk jag valt.
XML Filerna och ASP filerna är sparade som UTF-8 i EditPlus som jag använder för att öppna dom.
Nu visas inte texterna schysst i webbläsaren, har testat i Firefox.
å, ä & ö blir frågetecken.
Detta gäller både språkfilerna och de texter som laddas in på sidan från en MySQL-databas.
Tabellerna i databasen är sparade som Multilanguage / UTF-8.
Sparar jag Aspfilerna som UTF-8 och kör sidan så blir allt rätt, men uppdaterar jag sidan ett par gånger (trycker F5 i webbläsaren) så återgår å, ä, ö till frågetecken.
Väljer jag att åter spara filen som UTF-8 blir det "rätt" vid första uppdateringen, men byter man sida och går tillbaka blir det frågetecken igen.
Det ser bra ut för mig. Jag kan tänka mig att webbläsaren hämtar från cache när du trycker F5?
Tjena,
Cachen är rensad flera gånger.
Det konstiga är att när jag tog tag i det här igen, så fungerar det, alla tecken visas korrekt.
Men när polarn besökte sidan får han frågetecken istället för å, ä ö.
Nu har vi bara testat i Firefox, man kanske ska testa IE med, om det nu skiljer sig något.
Är det några fel på metataggarna, något jag missat?
Skulle verkligen behöva få en bra lösning på det här, kanske det finns någon annan charset jag kan köra med?
Skulle verkligen behöva få en bra lösning på det här,
Det enda jag kan tänka på är att ange charset-parameter med HTTP och ändra all data till utf-8; webbläsare kanske försöker sniffa innehållet och gissa enkodningen, och eftersom du har data som inte är utf-8 kan det bli fel gissning.
Hur kan det komma sig att webbläsaren "gissar" när jag anger klart och tydligen i headern att sidan är UTF-8?
Du säger att inte allt innehåll är UTF-8, vad syftar du på då?
- Är det javascripten?
Sidan hämtar innehållet dels från en MySQL databas (UTF-8 / Mulitlang) och dels från språkfiler, XML-filer som sparats som UTF-8.
Sidorna som hämtar innehållet är sparade som UTF-8 så jag kan inte förstå vad det kan bero på.
Ska testa att lägga upp sidan på webbhotellet och se om det blir någon skillnad, just nu kör jag på min lokala server hemmavid.
Hur kan det komma sig att webbläsaren "gissar" när jag anger klart och tydligen i headern att sidan är UTF-8?
Jag vet inte, och jag är inte säker på att så är fallet, men det skulle inte förvåna mig. Dessutom har du inte "klart och tydligt" angett vilken encoding som används; du har inte angett det med HTTP så webbläsaren måste börja tolka HTML-koden för att försöka hitta information där. HTML4-specifikationen säger inte hur det ska gå till; raka motsatsen egentligen:
HTML4 skrev:
user agents must not assume any default value for the "charset" parameter
(Tanken är att servern ska läsa av <meta http-equiv> och sen skicka med riktiga HTTP headers, men i allmänhet ignorerar servrar det och istället använder webbläsare den informationen.)
Möjlig anledning till att webbläsare skulle sniffa kan vara för att vissa sidor anger sig att vara utf-8 men i själva verket är nånting annat; webbläsare gör allt för att vara kompatibla med webben.