webForumDet fria alternativet

Teckenkodningsproblem

Webbutveckling

25 svar · 1 530 visningar · startad av J.N.

Medlem sedan apr. 20031 660 inlägg
Frågan#1

HEJ!

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.

csv-filen är omdöpt till txt pga wF.

Medlem sedan juni 20034 013 inlägg
#2

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.

Medlem sedan apr. 20031 660 inlägg
#3

HEJ!

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.

Medlem sedan juni 20034 013 inlägg
#4

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?

Medlem sedan dec. 20042 245 inlägg
#5

tydal skrev:

I textfiler (och csv som också är en textfil) kan man inte tala om det.

Det går att använda en BOM för att indikera att en fil är UTF-*.

Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

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?

Medlem sedan apr. 20031 660 inlägg
#7

HEJ!

zcorpan skrev:

Det går att använda en BOM för att indikera att en fil är UTF-*.

Ok, hur gör man det? Går det endast med UTF-kodning, eftersom du skriver som du gör?

Medlem sedan juni 20034 013 inlägg
#8

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.

Medlem sedan apr. 20031 660 inlägg
#9

tydal skrev:

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?

losta_teckenproblem.gif
Medlem sedan feb. 20034 441 inlägg
#10

Tjena,
nu har jag lite problem med samma sak.

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.

Skumt?!

Huvudet på sidan ser ut såhär:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta http-equiv="Content-Language" content="sv" />
	<meta http-equiv="expires" content="Mon, 1 Jul 2002 00:00:00 GMT" />
	<meta http-equiv="pragma" content="no-cache" />
	<meta http-equiv="imagetoolbar" content="no" />

	<meta name="description" lang="sv" content="..." />
	<meta name="description" lang="en" content="..." />
	<meta name="keywords" lang="sv" content="..." />
	<meta name="keywords" lang="en" content="..." />
	<meta name="author" lang="sv" content="..." />
	<meta name="owner" lang="sv" content="..." />
	<meta name="copyright" lang="sv" content="..." />

	<meta name="MSSmartTagsPreventParsing" content="true" />
	<meta name="robots" content="default,follow" />
	<meta name="revisit-after" content="30 days" />
	<meta name="distribution" content="global" />
</head>

Någon som har förslag?
Tack på förhand!

Medlem sedan dec. 20042 245 inlägg
#11

Vad skickar servern för Content-Type header? (Du kan använda tex http://www.rexswain.com/httpview.html för att kolla HTTP headers.)

Medlem sedan feb. 20034 441 inlägg
#12

Hmm, ja, vad returnerar den egentligen?

Sending request:

GET /mte.se/default.asp?mP=1 HTTP/1.1
Host: mickea.gotdns.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
Connection: close

• Finding host IP address...
• Host IP address = **.***.***.**
• Finding TCP protocol...
• Binding to local socket...
• Connecting to host...
• Sending request...
• Waiting for response...
Receiving Header:
HTTP/1.1·200·OK(CR)(LF)
Server:·Microsoft-IIS/5.1(CR)(LF)
Date:·Sat,·19·Aug·2006·16:59:29·GMT(CR)(LF)
X-Powered-By:·ASP.NET(CR)(LF)
Connection:·close(CR)(LF)
Content-Length:·15897(CR)(LF)
[b]Content-Type:·text/html(CR)(LF)[/b]
Set-Cookie:·MTE%5FLangcookie%5F2006=SE;·expires=Sun,·19-Aug-2007·16:59:28·GMT;·path=/(CR)(LF)
Set-Cookie:·ASPSESSIONIDQQATRCTB=GALBGDHDLCOOGDGLPHGJDBCO;·path=/(CR)(LF)
Cache-control:·private(CR)(LF)
(CR)(LF)

Står väl inget om kodningen av tecken där va?!

Medlem sedan dec. 20042 245 inlägg
#13

http://mickea.gotdns.org/mte.se/default.asp?mP=1 verkar vara delvis utf-8 och delvis nånting annat. Jag ser

txt=prompt("Ange den text du vill göra kursiv","");

(vilket ser ut att vara utf-8 dekodat som windows-1252), samt

alert("Du m�ste fylla i en giltig Mailadress.\n");

(som kan vara windows-1252 dekodat som utf-8), men även

<b>Utökat Återförsäljarnät i Sverige</b>

(som är utf-8).

Medlem sedan feb. 20034 441 inlägg
#14

jojo, javascriptbiten är inte helt klar.
Men vad är den rätta lösningen för att få till det med "den vanliga" sidan?

Medlem sedan dec. 20042 245 inlägg
#15

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?

Medlem sedan feb. 20034 441 inlägg
#16

zcorpan skrev:

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?

Tack,

Medlem sedan dec. 20042 245 inlägg
#17

MickeA.com skrev:

Men när polarn besökte sidan får han frågetecken istället för å, ä ö.

Kanske att polarns webbläsare hämtar från cache?

MeckeA.com skrev:

Är det några fel på metataggarna, något jag missat?

Inte vad jag kan se.

MickeA.com skrev:

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.

MickeA.com skrev:

kanske det finns någon annan charset jag kan köra med?

På vilket sätt skulle det hjälpa?

Medlem sedan feb. 20034 441 inlägg
#18

zcorpan skrev:

På vilket sätt skulle det hjälpa?

Inte en aning, var bara ett dåligt förslag...

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.

Medlem sedan dec. 20042 245 inlägg
#19

MickeA.com skrev:

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

-- http://www.w3.org/TR/html4/charset.html#spec-char-encoding

(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.

MickeA.com skrev:

Du säger att inte allt innehåll är UTF-8, vad syftar du på då?
- Är det javascripten?

Ja. Det är ingen skillnad på "javascript" och "HTML" ur sniffningssynpunkt.

Medlem sedan feb. 20034 441 inlägg
#20

Aha, ok, nu klarnar det lite till.
Jag gör såhär att jag gör klart hela siten och ser till att alla filer är "likadana".

Funkar det fortfarande inte så återkommer jag.

Tack sålänge!

268 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)