[JS] ISO-8859-1 naar UTF-8 conversie

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Ask!
  • Registratie: Februari 2015
  • Laatst online: 04-10 12:12
Dag allemaal,

We zitten met ons project met een probleem.
Van de server krijgen we een ISO-8859-1 response, terwijl de frontend gebruik maakt van UTF-8.
Om dit netjes op te lossen, doe je dit natuurlijk op de server.
Maar een snellere oplossing nu is om dit in de frontend te doen, alleen de conversie blijkt moeilijk dan verwacht.

Oplossingen als bijvoorbeeld
code:
1
decodeURIComponent(escape(<stringInISO-8859-1>))


blijken niet te helpen helaas.

Heeft iemand ervaring met deze conversie.

Alle reacties


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Probeer het eens andersom: unescape(encodeURIComponent(string))

Waar hoort mijn topic?

PRG>>WEB

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Ask!
  • Registratie: Februari 2015
  • Laatst online: 04-10 12:12
NMe schreef op woensdag 13 april 2016 @ 12:11:
Probeer het eens andersom: unescape(encodeURIComponent(string))
Ook die heb ik uiteraard al geprobeerd, ik vrees dat ik alle antwoorden van het web al gebruikt heb.
Ik denk ook dat je dit gokt, omdat je dit hebt gevonden op StackOverflow ( Hit me when I'm wrong ).
Ik moet echt iemand hebben die het echt heeft gedaan :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je iets al geprobeerd hebt, zeg dat er dan even bij, scheelt zowel jezelf als de mensen die je proberen te helpen tijd. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Ask!
  • Registratie: Februari 2015
  • Laatst online: 04-10 12:12
NMe schreef op woensdag 13 april 2016 @ 12:18:
Als je iets al geprobeerd hebt, zeg dat er dan even bij, scheelt zowel jezelf als de mensen die je proberen te helpen tijd. ;)
Dan had ik duidelijker moeten zijn inderdaad. Goed punt!

Ik heb veel gegoogled naar bijvoorbeeld:
javascript iso-8859-1 to utf8
javascript iso-8859-1 to unicode ( Voor dubbele conversie )

En vrijwel alle antwoorden op de eerste 3 pagina's die ik tegenkwam uitgeprobeerd.

Feit blijft dat deze conversie niet veel voorkomt, dus daarom zit ik met een klein probleempje haha.

Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 17:07
Doe eens een voorbeeld van je input-data, de string in de tussenstap en de output zoals je hem met je huidige functie en NMe's variant krijgt.

[ Voor 6% gewijzigd door OnTracK op 13-04-2016 12:29 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • Ask!
  • Registratie: Februari 2015
  • Laatst online: 04-10 12:12
OnTracK schreef op woensdag 13 april 2016 @ 12:22:
Doe eens een voorbeeld van je input-data, de string in de tussenstap en de output zoals je hem met je huidige functie krijgt.
Ik werk met React Redux, dus je hebt zoiets:

code:
1
2
3
4
5
6
7
8
9
10
11
.then(r => {
  if (r.ok) {
    return r.text()
  } else {
    throw new Error(r.statusText)
  }
})
.then(string => {
  string = unescape(encodeURIComponent(string))
  return Promise.resolve(JSON.parse(string))
})


Omdat het met Promises werkt, moet je een extra .then hebben helaas.
In de .then(string => heb je een string te pakken, in ISO-8859-1.
Omdat de frontend met UTF-8 werkt, wil ik het converten. Daar gaat het om.

De string parameter ( Leuke naam he ) is bijvoorbeeld:
{ title: "blabla", abstract: "Sîne klâwen durh die wolken sint geslagen" }
Zoals je ziet, zitten hier leuke characters in waar het dus moeite mee heeft.

Converten zoals in het voorbeeld eindigt in:
{ title: "blabla", abstract: "S�ne kl�wen durh die wolken sint geslagen" }

Hoe krijg ik exact dezelfde characters hieruit?

Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 17:07
Maar waar doe je die weergave van je output?

Want die bytes worden weer geïnterpreteerd door je browser in combinatie met de Content-Type / Charset header. Dus het feit dat de string voor de conversie goed uitziet betekend eigenlijk dat deze string iig al geïnterpreteerd wordt als ISO-8859-1. Als je de tweede string ook interpreteerd als ISO-8859-1 dan verwacht ik inderdaad dat die er als bovenstaand uitziet. Echter interpreteer je dezelfde byte-sequence als UTF-8 dan ziet deze er als het goed is weer correct uit in je browser.

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • Ask!
  • Registratie: Februari 2015
  • Laatst online: 04-10 12:12
De weergave doe ik in de console.
Ik print de output voor het converten en erna.
Voor:
{ title: "blabla", abstract: "Sîne klâwen durh die wolken sint geslagen" }
Na:
{ title: "blabla", abstract: "S�ne kl�wen durh die wolken sint geslagen" }

Daarnaast voer ik de veranderingen ook meteen door naar de applicatie, waar diezelfde tekst komt te staan.

[ Voor 17% gewijzigd door Ask! op 13-04-2016 12:47 ]


Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 18:54

Cyphax

Moderator LNX
Ask! schreef op woensdag 13 april 2016 @ 12:47:
De weergave doe ik in de console.
Dan kan het ook nog aan de console liggen, dat die geen utf-8 laat zien?

Kan je hier iets mee: http://stackoverflow.com/...85/utf-8-in-windows-7-cmd?

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • Ask!
  • Registratie: Februari 2015
  • Laatst online: 04-10 12:12
Cyphax schreef op woensdag 13 april 2016 @ 12:55:
[...]

Dan kan het ook nog aan de console liggen, dat die geen utf-8 laat zien?

Kan je hier iets mee: http://stackoverflow.com/...85/utf-8-in-windows-7-cmd?
Windows doen we niet aan, allemaal Linux! :P
Ik bedoelde ook de Javascript console in de browser, sorry!

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
JavaScript is helemaal geen UTF-8 maar UTF-16/UCS-2 (check de ECMAScript specificaties).
Je moet in de server response gewoon de juiste content-type charset meesturen.

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
DJMaze schreef op woensdag 13 april 2016 @ 13:07:
JavaScript is helemaal geen UTF-8 maar UTF-16/UCS-2 (check de ECMAScript specificaties).
Je moet in de server response gewoon de juiste content-type charset meesturen.
Inderdaad. De interne afhandeling van een XMLHttpRequest door de browser faciliteert de charset conversie al en zodra je in JavaScript-land beland bent, zijn alle strings waar je mee werkt UCS-2.

Als door ontbreken van de juiste charset header informatie de browser deze conversie niet goed kan laten werken, dan is het antwoord simpel; zorg dat die header er komt te staan. Kun je de server code daar niet direct voor aanpassen, dan kun je nog beter een dommy proxy opzetten die de header alsnog aan een response toe kan voegen, dan dat je gaat proberen om een corrupte charset conversie met de hand te corrigeren.
Pagina: 1