Toon posts:

Hoe zie je in een browser het verschil tussen 1252 en 8859-1

Pagina: 1
Acties:
  • 109 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Topictitel is wat cryptisch. Ik heb al eerder geprobeerd antwoord te vinden op deze vraag, maar het wil maar niet lukken. Ik probeer het nog een laatste keer, en anders moet ik er maar mee leren leven.

Hoe kun je in een browser het verschil zien tussen een bestand opgeslagen met iso-8859-1 en een opgeslagen met windows-1252? Om het even duidelijk te houden: probeer eens onder windows een .txt bestand op te slaan met smart quotes (gebruik alt+0147 en alt+0148 voor invoer). Sla deze vervolgens als .txt op en kies expliciet voor ANSI encoding (windows-1252). Bekijk dit bestand nu in een browser en kies in de browser expliciet voor om het met iso-8859-1 te bekijken (als dit niet al het geval is).

De browser houdt je namelijk voor de gek, en toont ondanks dat je voor iso-8859-1 kiest, toch de smartquotes. De vraag is nu, hoe kun je dan zien dat dit bestand met windows-1252 opgeslagen is?? Dat is toch niet de bedoeling zo?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 01-05 20:17

Janoz

Moderator Devschuur®

!litemod

Dat hangt er helemaal van af. Als het via internet opgevraagd wordt, dan wordt de encoding door de webserver meegestuurt. Open je het direct dan is het geheel afhankelijk van hij de browser er mee omgaat. Daarnaast heeft IE zelf ook nogal wat obfuscerende foutcorrectie. Geen Idee trouwens hoe windows het verschil in encodings ziet in een txt file.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Nee, ho wacht. Als je het zelf gewoon als .txt opslaat op je desktop, en dan ff naar een browser sleept, dan is de server dus geen factor. Daar hoeven we het nu niet over te hebben.

Ten tweede is het niet IE specifiek en geef ik expliciet de encoding aan als iso-8859-1. Dan wordt je dus voor de gek gehouden, want elke browser laat je de smart quotes zien, dus zou je kunnen denken dat het iso-8859-1 is, maar dat is het niet! Das toch niet handig dan?

Dat ie automatisch kan detecteren enzo, das leuk en aardig, maar hij houdt zich niet aan mijn menukeuze.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-05 21:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op maandag 22 augustus 2005 @ 16:13:
Nee, ho wacht. Als je het zelf gewoon als .txt opslaat op je desktop, en dan ff naar een browser sleept, dan is de server dus geen factor. Daar hoeven we het nu niet over te hebben.
Jawel, want dat betekent dus automatisch dat het bestand in windows-1252 geencodeerd is (het is immers een textbestand binnen het windows operating system)

.edit: ISO 8859-1 kan ik trouwens niet expliciet kiezen, maar bij de andere codepages geeft IE soms blokjes en soms vraagtekens ipv de quotes.

[ Voor 15% gewijzigd door .oisyn op 22-08-2005 16:25 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
.oisyn schreef op maandag 22 augustus 2005 @ 16:21:
[...]
Jawel, want dat betekent dus automatisch dat het bestand in windows-1252 geencodeerd is (het is immers een textbestand binnen het windows operating system)
Dat zegt niets. CP1252 is de aanname, in de afwezigheid van andere informatie (zoals een UTF BOM) maar niets verbiedt je om een locale in te stellen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
De grote vraag moet zijn, waarom? Een ISO-8859-1 tekstbestand is altijd te tonen als een CP1252 bestand, dus dat IE dat aanneemt is een robuuste implementatie (werkt ook als iemand ten onrechte ISO-8859-1 op een CP1252 bestand plakt).

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-05 21:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

MSalters schreef op maandag 22 augustus 2005 @ 16:34:
[...]

Dat zegt niets. CP1252 is de aanname, in de afwezigheid van andere informatie (zoals een UTF BOM) maar niets verbiedt je om een locale in te stellen.
Ik bedoel dus dat die aanname gebaseerd wordt op het feit dat je gewoon een lokale textfile opent op een windows OS. Het is nogal logisch dat er dan wordt aangenomen dat het de windows-1252 codepage is.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
MSalters schreef op maandag 22 augustus 2005 @ 16:36:
De grote vraag moet zijn, waarom? Een ISO-8859-1 tekstbestand is altijd te tonen als een CP1252 bestand, dus dat IE dat aanneemt is een robuuste implementatie (werkt ook als iemand ten onrechte ISO-8859-1 op een CP1252 bestand plakt).
Nou ja, de grote vraag is de vraag die ik stel. Dus, nog één keer (om niet te verzanden in opmerkingen als "waarom wil je dat" of "je hebt toch ook unicode"), mijn vraag is: waarom toont de browser een bestand met windows-1252 specifieke karakters (deze zitten niet in iso-8859-1) als ik expliciet voor iso-8859-1 kies?

Probeer het zelf ook eens, dan zie je denk ik wat ik bedoel. En nogmaals, van een server is hier geen sprake, dat het bestand windows-1252 encoding heeft, dat moge duidelijk zijn, ik kies hier voor het experiment zelf voor. Punt van discussie is, dan moet de browser ? tonen of een vierkantje, dan weet ik: he, dit is niet iso-8859-1...

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Ok, als je de vraag wil blijven stellen, dan is het antwoord dus wat ik al zei Je browser laat de file als ISO-8859-1 zien! Nou moet je niet eigenwijs zijn, en beweren van niet. Die quotes zitten inderdaad niet in ISO-8859-1. Op die plek mag de browser dus elk willekeurig teken laten zien.

Een erg handige keuze is om karakters die niet in ISO-8859-1 zitten te tonen alsof ze uit CP1252 komen. Het gevolg is ( 1 ) dat je CP1252 en ISO-8859-1 exact hetzelfde kunt implementeren (geen dubbele code) en ( 2 ) een CP1252 file die ten onrechte als ISO-8859-1 wordt geopend, toch correct wordt getoond.

Je kunt wel een ? of een vierkantje verwachten, maar dat is jammer. Als jij liegt tegen de browser, dan moet je niet verwachten dat die zich "correct" gedraagt. De browser laat elke ISO-8859-1 file correct zien, net zoals elke CP1252 file, zelfs als je de encodings verwart.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Windows is een oud besturingssysteem gebaseerd op DOS principes.
In DOS is het zo dat de extentie (bv .txt) bepaald wat het type van het bestand is. Bij veel bestandsformaten is het bovendien zo dat het bestand begint met een header waar nog een keer het type staat. Bv .exe begint met "MZ". .bmp met BM, .gif met GIF enz. In zo'n header zou ook iets kunnen staan over codering.
Oude bestandstypen hebben dat niet. .com begint gewoon gelijk met code en .txt begint gelijk met tekst.

Bij nieuwe besturingssystemen wordt volgens mij ook in het bestandsysteem opgeslagen wat voor soort bestand het is. Bij DOS en Windows9x (FAT) was dit niet het geval. Bij NTFS weet ik niet, maar ik denk dat het ook hier niet in zit.

Samengevat: Er wordt nergens opgeslagen wat de codering is, dus de browser kan het nooit weten.

  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 29-04 17:12
Er wordt wél opgeslagen welke codering het is, wat is een Byte Order Mark dan? Of begin ik dingen gruwelijk door mekaar te gooien nu.

Skat! Skat! Skat!


Verwijderd

Topicstarter
MSalters schreef op maandag 22 augustus 2005 @ 17:20:
Ok, als je de vraag wil blijven stellen, dan is het antwoord dus wat ik al zei Je browser laat de file als ISO-8859-1 zien! Nou moet je niet eigenwijs zijn, en beweren van niet. Die quotes zitten inderdaad niet in ISO-8859-1. Op die plek mag de browser dus elk willekeurig teken laten zien.

Een erg handige keuze is om karakters die niet in ISO-8859-1 zitten te tonen alsof ze uit CP1252 komen. Het gevolg is ( 1 ) dat je CP1252 en ISO-8859-1 exact hetzelfde kunt implementeren (geen dubbele code) en ( 2 ) een CP1252 file die ten onrechte als ISO-8859-1 wordt geopend, toch correct wordt getoond.

Je kunt wel een ? of een vierkantje verwachten, maar dat is jammer. Als jij liegt tegen de browser, dan moet je niet verwachten dat die zich "correct" gedraagt. De browser laat elke ISO-8859-1 file correct zien, net zoals elke CP1252 file, zelfs als je de encodings verwart.
Nou ja, sorry hoor. Ik wilde niet eigenwijs overkomen. Maar ja, ik zie in vergelijkbare gevallen meestal een vraagteken of een vierkantje in veel programma's, dus ik dacht dat dat een soort ongeschreven wet was, als je het karakter niet hebt in de encoding, geef dat dan zo aan.

Ik denk: ik zet zelf de encoding op iso-8859-1, dan valt een windows-1252 gelijk door de mand. Ik ben het helemaal met je eens dat een soort fallback-gedrag handig is. Maar is het correct? Kijk ik ben op zoek naar een handige manier om snel te weten te komen wat de encoding is. De browser leek me ideaal, juist vanwege de optie om zelf de encoding te bepalen waarin een bestand wordt geinterpreteerd. Als ik een utf-8 bestand met bom in bijvoorbeeld Opera bekijk met ios-8859-1, krijg ik de bom te zien. Dan weet ik gelijk wat ik voor encoding heb.

Maar voor windows-1252 moet ik in een hex-editor kijken o.i.d.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-05 21:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

coubertin119 schreef op maandag 22 augustus 2005 @ 20:07:
Er wordt wél opgeslagen welke codering het is, wat is een Byte Order Mark dan? Of begin ik dingen gruwelijk door mekaar te gooien nu.
Dat is optioneel en alleen als je je bestand met een bepaalde codering opslaat. De standaard codering heeft geen byte order mark.

Bij mijn test-textbestandje waar “hoi” in staat (inclusief die smart quotes), krijg ik dit als output in m'n binary viewer:
code:
1
93 68 6F 69 94          .hoi.

[ Voor 20% gewijzigd door .oisyn op 22-08-2005 20:26 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Ik geloof dat sommige mensen hier niet helemaal weten wat een encoding is. Een tekstfile is een verzameling bytes op disk. Om daar iets zinnigs van te maken moet je die file parsen als een verzameling karakters. Een encoding geeft aan hoe je die bytes interpreteert.

Er zijn meer dan 100.000 karakters bekend. Dat past dus nooit in een enkele byte. Aan de andere kant gebruiken de meeste mensen een kleine subset. Welke subset, dat verschilt nogal. Er zijn daarom stapels fixed-length 8-bits encodings van subsets. Je kunt echter aan een serie bytes zelden met zekerheid bepalen wat ze betekenen. Bijna elke subset geeft wel een betekenis aan de byte met waarde 160. Het beste wat je kunt doen is is encodings uitsluiten. Zo kun je bijvoorbeeld uitsluiten dat je een ISO-8859-? encoding hebt als je een karakter met waarde 147 tegenkomt (control char in die encodings)

Een BOM is net zoiets. Dat is een serie bytes. Er is een UTF-16LE BOM, een UTF-16BE BOM en een UTF-8 BOM. Die zijn verschillend, zodat je UTF files kunt onderscheiden als je a priori weet dat het UTF is! Overigens mag een BOM alleen aan het begin voorkomen, en zijn die sequences in de meeste andere encodings ongebruikelijk, dus als je een BOM tegenkomt heb je een goede kans dat het inderdaad UTF is. Evengoed zijn alle drie de BOMs gewoon legale ISO8859-1 tekststrings.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1