encoding

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

R dc

r dc

15/01/2018 21:33:39
Quote Anchor link
Ik krijg via een api een tekst binnen die volgens mij foutief gecodeerd is.
VB het unicode karakter 'thumbs up' wordt: Ø=ÜM
en België ! wordt: ¡B¡e¡l¡g¡i¡ë¡ ¡!
Iemand enig idee hoe ik hiervan terug UTF-8 codering kan maken. Heb al allerlei combinatie geprobeerd met iconv in php, maar lukt me niet...
alvast hartelijk dank voor de hulp.
 
PHP hulp

PHP hulp

30/01/2025 22:25:29
 
Ward van der Put
Moderator

Ward van der Put

15/01/2018 21:38:29
Quote Anchor link
Welke encoding wordt in de HTTP-headers van de API-response genoemd?
 
R dc

r dc

15/01/2018 21:43:08
Quote Anchor link
zou utf-8 moeten zijn
als ik Ø=ÜM google kom ik hierop uit: http://boards.straightdope.com/sdmb/showthread.php?t=782750

en daar zeggen ze: It is a UTF-8 version of an emoticon coding. If you write it out in hexadecimal is D83D DC4D, which is the thumbs up character. https://apps.timwhitlock.info/unicode/inspect?s=%F0%9F%91%8D

Het zou dus om een UTF-8 encoding gaan van ????
Maar dat lijkt me raar, want ???? in UTF-8 geeft gewoon ????

edit: hier in het forum gaat er dus duidelijk ook iets mis met unicode karakters. :-)
Gewijzigd op 15/01/2018 21:46:08 door r dc
 
Nick Vledder

Nick Vledder

15/01/2018 22:22:08
Quote Anchor link
De opmerking over encoding op dit forum is mij ook opgevallen. Bij de advertenties valt het ook op.
 
- Ariën  -
Beheerder

- Ariën -

15/01/2018 22:32:16
Quote Anchor link
Klopt, dat moet inderdaad verholpen worden.
 
Thomas van den Heuvel

Thomas van den Heuvel

15/01/2018 22:37:46
Quote Anchor link
Mja, dat heb ik al heel lang geleden gemeld :p.

@r dc zorg dat je zelf de data ook presenteert/opslaat als UTF-8, oftewel, zorg dat je een meta tag en/of PHP-header gebruikt, maar ook dat je een character encoding instelt als je je data wegschrijft naar je database.

EDIT: en als je database tabellen latin1 zijn, dan worden speciale karakters gedowngrade naar ???? omdat latin1 deze karakters niet kent. Mogelijk moet je ook utf8mb4 gebruiken om alle multibyte karakters te laten passen in je database, utf8 (de encoding in MySQL) bestrijkt niet dezelfde set als UTF-8.
Gewijzigd op 15/01/2018 22:43:46 door Thomas van den Heuvel
 
R dc

r dc

16/01/2018 11:34:33
Quote Anchor link
@Thomas Dit is geen database probleem. De foute encoding is extern en buiten bereik. Ik kan deze niet aanpassen. Ik wil ze op mijn platform wel ongedaan maken.

Heel concreet heb ik dus een string in php die volgende letters bevat: Ø=ÜM
En hiervan wil ik het unicode karakter 'thumbsup' maken (in UTF-8: F0 9F 91 8D)

Hoe doe ik dit?
 
Ivo P

Ivo P

16/01/2018 12:45:34
Quote Anchor link
Kun je iets met deze functies?

http://php.net/manual/en/ref.iconv.php
 
R dc

r dc

16/01/2018 16:47:53
Quote Anchor link
@ivo p: zie eerste post "Heb al allerlei combinatie geprobeerd met iconv in php, maar lukt me niet..."
 
Thomas van den Heuvel

Thomas van den Heuvel

16/01/2018 17:17:14
Quote Anchor link
R dc op 16/01/2018 11:34:33:
@Thomas Dit is geen database probleem. De foute encoding is extern en buiten bereik. Ik kan deze niet aanpassen. Ik wil ze op mijn platform wel ongedaan maken.

Dit lijkt mij iets wat mogelijk aan die kant opgelost moet worden. Ik zie ook niet hoe je van jouw input naar een thumbs-up emoji zou moeten gaan. Mogelijk is er iets lost in translation in welk geval je simpelweg niet van A naar B kunt komen...

... aan de andere kant: misschien ligt dit ook niet aan de API zelf maar aan een station ervoor? Misschien wordt er al corrupte data gevoerd aan de API? Ik bedoel, is de bron van de data die voor problemen zorgt elke keer dezelfde? Of zijn er meerdere bronnen die via die API werken en levert dat allemaal corrupte data op? In het laatste geval is het misschien waarschijnlijker dat de API roet in het eten gooit, maar anders? Mogelijk valt er niets op te lossen omdat het probleem niet in de API zelf zit?

Kun je dit mogelijk zelf testen? Je geeft ook bar weinig informatie over de API, wat het voor ons redelijk onmogelijk maakt om ons een voorstelling te maken van hoe dat ding werkt. Zijn er misschien andere gebruikers/API-afnemers die dezelfde problemen hebben? Heeft dat ding een FAQ/support forum et cetera.
 
R dc

r dc

16/01/2018 17:37:53
Quote Anchor link
het is zeker mogelijk, de juiste bytes zijn er, er is geen info verloren gegaan.

als ik Ø=ÜM omzet naar utf-16 code units krijg ik: 00D8 003D 00DC 004D
de Ø=ÜM code points in hex geven: D8 3D DC 4D

het thumbsup karakter omzetten naar utf-16 code units: D83D DC4D

Het is dus perfect mogelijk om op byte niveau de omzetting te doen. Maar ik geraak er niet in php, omdat ik de syntax onvoldoende beheers.
 
Michael -

Michael -

16/01/2018 18:15:04
Quote Anchor link
Waarom kom je niet met meer informatie over de API? Wat is het voor API, is een officiële API met documentatie, heb je een link naar de API?
 
R dc

r dc

16/01/2018 21:51:00
Quote Anchor link
neen, geen gekende API.
Na wat verder onderzoek is het blijkbaar de manier waarop de urlencoding / decoding werkt.
De API stuurt unicode text door als volgt:
Hallo [thumbsup] test -> %00H%00a%00l%00l%00o%00+%D8%3D%DCM%00+%00t%00e%00s%00t%00
en php maakt daar volgende UTF-8 tekst van: H a l l o Ø=ÜM t e s t
 
Thomas van den Heuvel

Thomas van den Heuvel

16/01/2018 23:02:23
Quote Anchor link
Probeer het volgende eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
header('Content-Type: text/html; charset=UTF-8'); // force UTF-8
$test = mb_convert_encoding('<text uit API>', 'UTF-8', 'UTF-16'); // from UTF-16 to UTF-8
echo $test; // waffles
?>
 
R dc

r dc

17/01/2018 00:11:42
Quote Anchor link
ik heb het gevonden: iconv('utf-16be', 'utf-8', rawurldecode($getvariable))
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.