Foute karakters

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Backend developer

Functie omschrijving Ben jij graag bezig met de back-end van applicaties? Zou je dit graag willen doen voor een kleine werkgever waar ook tijd is voor een drankje op zijn tijd? Je taken hierbij zullen bestaan uit: Gebruik maken van de volgende technieken: .NET (core), C#, SQL, XML, MVC, JSON, REST & SOAP API. Gebruik maken van de volgende tools: Visual Studio, GIT, Jira, Jenkins. Bovengenoemde technieken en tools ga je gebruiken om: Nieuwe functionaliteiten te ontwikkelen. Wijzigingsverzoeken van klanten uitvoeren. Verzorgen van koppelingen tussen data. Bedrijfsprofiel Jouw nieuwe werkgever bevindt zich in regio Raamdonksveer en bieden oplossingen op gebied

Bekijk vacature »

SQL Database developer

Functie omschrijving Wil jij meewerken aan het creëren van slimme software om magazijnen als een geoliede machine te laten lopen? Wij zoeken een zorgvuldig persoon, iemand die niet snel de hand omdraait voor complexe algoritmes. Denk jij dat jij de SQL ontwikkelaar bent die wij zoeken? Lees snel verder en wie weet zitten we binnenkort samen aan tafel! Jouw werkzaamheden zullen er als volgt uitzien: Je houdt je bezig met het ontwerpen en ontwikkelen van MS SQL server databases, dit doe je met T-SQL als programmeer laag. Je gaat aan high-end software oplossingen werken, dit doe je voor de optimalisatie

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Programmeren van zelflerende robots Werken op kantoor en testen in de bedrijfshal Je krijgt verantwoordelijkheid, vrijheid en je mag werken naar eigen inzicht De organisatie Hier ga je aan de slag Een bedrijf dat innovatieve robottoepassingen ontwerpt en bouwt voor onder andere de staal industrie, energie- bouw- en agrarische sector. De robots die vaak in combinatie met diverse randapparatuur geleverd worden vormen een totaaloplossing voor de klant. Dit zijn klanten over de hele wereld, van België en Duitsland tot China, India, maar ook in Nederland. Projecten waar momenteel aan wordt

Bekijk vacature »

Back end developer PHP

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

PHP Developer (junior functie)

Functie omschrijving Ben jij een starter en wil je werken bij een jong en leuk bedrijf? Lees dan verder! Wij zijn op zoek naar een PHP Developer binnen een junior functie. Binnen dit bedrijf gaat het om persoonlijke aandacht en ontwikkeling! Je komt te werken voor een leuk communicatiebureau die alles op het gebied van online en offline communicatie doet. Dit doen zij voor verschillende branches, waardoor je aan diverse soorten projecten mag werken, dit maakt deze baan erg leuk! Daarbij werk je aan een door hun zelf ontwikkeld framework welke goed leesbaar is. Je maakt voor bedrijven op maat

Bekijk vacature »

Traineeship Java Developer

Functie Wat ga je doen als Java Developer? Jij start via ons bij deze opdrachtgever als Trainee Java ontwikkelaar, tijdens het traineeship ga je in 1 jaar van de basis naar professioneel Java ontwikkelaar. Je start samen met een groep trainees, volgt de aangeboden cursussen en gaat aan de slag bij één van onze opdrachtgevers. Na een aantal maanden volgt de volgende opdracht. Door de groei in jouw rol kom je op steeds complexere opdrachten terecht. Veel afwisseling dus. Collega’s met ervaring helpen je bij deze groei en samen met jouw coach ga je een persoonlijke leerplan opzetten om jou

Bekijk vacature »

Front-end developer (medior/senior)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Belastingdienst - Freelance Senior Applicatie ontw

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 6 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Functieomschrijving: We verwachten van je, dat je: Brede ervaring hebt als JAVA-ontwikkelaar; Ervaring hebt met Agile/Scrum-werken en je thuis voelt in een Agile omgeving; Een aandeel levert aan het scrumproces en in de SAFe-releasetrain; Zelfstandig werkt in een scrumteam en intensief de samenwerking op zoekt met je directe collega’s en je omgeving; Ervaring meebrengt met het schattten en inplannen van taken tot en met het testen en demonstreren van de opgeleverde functionaliteit; Collega’s in je

Bekijk vacature »

Software Developer

Dit ga je doen Je bent verantwoordelijk voor de warehouse applicatie die een integratie heeft met de PLC laag; Je ontwikkelt in C#/.Net; Je bent verantwoordelijk voor het ontwikkelen van interfaces en het visualiseren van componenten; Je denkt mee over het design voor business oplossingen; Je bent verantwoordelijk voor het testen van de gebouwde oplossing. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Software Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van de warehouses. Op dit moment wordt er nog gebruik

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Modern, innovatief en Informeel bedrijf waar veel mogelijk is Werken met diverse robot merken Meehelpen met inbedrijfstellingen bij de klant De organisatie Hier ga je aan de slag Dit groeiende bedrijf van totaaloplossingen in de automatisering van productieprocessen, is hoofdzakelijk actief in de Benelux. Vanuit het kantoor in regio Amersfoort worden veel oplossingen geboden in de vorm van robotica. Geen project is hetzelfde wat garant staat voor bijzonder veel afwisseling. De bedrijfsgrootte is ongeveer 80 man. Van gerobotiseerde machinebeladingen tot aan assemblage automatiseringen wordt vanuit krachtige engineering maatwerk equipment geleverd.

Bekijk vacature »

.Net developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als .Net Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Als developer bouw je in DevOps teams aan enterprise applicaties, nieuwe IOT, Chatbots of AI oplossingen. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Natuurlijk krijg jij de mogelijkheid je te certificeren in dit vakgebied. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij vorig jaar Microsoft Partner of the year geworden.

Bekijk vacature »

Java/Kotlin Developer

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Senior Front-end developer Consultancy

Functie Als front-end developer ga je aan de slag voor verschillende klanten, waarbij veel rekening wordt gehouden met waar je woont (dit is altijd binnen het uur), en word er gezocht naar een organisatie die past bij jou. Zowel qua persoonlijke ambities als de technische aansluiting. De opdrachten duren gemiddeld 1 à 2 jaar maar dit hangt ook af van je wensen. Je werkt in een teamverband voor een klant en zult nauw samenwerken met zowel eigen collega’s als die bij de klant werkzaam zijn. Ze zijn op zoek naar een technische front-end developer die ruime ervaring heeft in één

Bekijk vacature »

Fullstack developer (NodeJS, React, AWS)

Functie Als Fullstack developer kom je te werken in het ontwikkelteam, maar zoals gezegd komt er veel meer bij kijken dan alleen maar ontwikkelen. Je bent samen met je collega’s continu bezig om de software uit te breiden maar hiernaast doe je doorlopend onderzoek naar de inzet van bijvoorbeeld Machine Learning. Ze willen met hun software echt voorlopen op andere en toegevoegde waarde leveren voor de eindgebruiker. Mede hierom zijn ze erg benieuwd naar iemand zijn persoonlijkheid, of hij graag nieuwe dingen uitzoekt (Google!), en initiatief neemt. Maar waar staan ze nu? Na een onderzoeksfase van ruim een jaar zijn

Bekijk vacature »
Aad B

Aad B

02/12/2019 12:12:34
Quote Anchor link
Na complete migratie/upgrade van het OS (Debian) en dus naar MariaDB en php7 worden bijzondere karakters niet meer juist getoond op de webpagina. Het gaat hier om de simpele e-trema zoals in: België
In de database is het nog steeds okee, althans voor zover ik kan inschatten. Een select van de tabel, vanuit een ascii terminal (putty) geeft dit:

MariaDB [vaarweginfo]> select distinct land from vaarweginfo;

land
+-----------+
Nederland
België
Frankrijk

(als ik code tags hier omheen zet verdwijnt de ë compleet??)

De webpagina haalt het land op uit een tabel en toont België dan als België
Heeft onder MySQL en php5 tot dan toe goed gewerkt. Waar moet ik dit zoeken?
Gewijzigd op 02/12/2019 12:20:38 door Aad B
 
PHP hulp

PHP hulp

25/04/2024 12:59:17
 
- Ariën  -
Beheerder

- Ariën -

02/12/2019 12:24:18
Quote Anchor link
In de wereld van UTF-8 moet je dit zoeken.
Hoe heb je dit ingesteld in je site?
Gewijzigd op 02/12/2019 12:25:00 door - Ariën -
 
Aad B

Aad B

02/12/2019 12:33:55
Quote Anchor link
Ariën, wat bedoel je met ingesteld in je site?? Iets in het OS of Apache config of iets in de html pagina's zelf??
Gewijzigd op 02/12/2019 12:34:07 door Aad B
 
- SanThe -

- SanThe -

02/12/2019 12:43:51
Quote Anchor link
In <head> <meta charset="utf-8">
 
- Ariën  -
Beheerder

- Ariën -

02/12/2019 13:03:10
Quote Anchor link
Ik heb het over je site, en niet over je OS (Linux, Windows) of Apache (Webserver).
Ik neem aan dat je daar ook netjes UTF-8 afdwingt? Of gebruik je nog het beperkte iso-8859-X? En hoe staan de collaties van je databasetabellen?
Gewijzigd op 02/12/2019 13:04:22 door - Ariën -
 
Aad B

Aad B

02/12/2019 13:40:05
Quote Anchor link
SanThe en Ariën dank voor de tips, het was inderdaad charset=iso-8859-1 in plaats van utf-8 in de gegenereerde HTML pagina. Probleem opgelost.
 
- Ariën  -
Beheerder

- Ariën -

02/12/2019 13:43:24
Quote Anchor link
Maar de vraag is: Hie kan dit opeens aangepast zijn? Een verhuizing hoort niet te zorgen voor een verandering van je charset. Ik kan me wel indenken de encoding van je database aangepast kan zijn toen deze gedumpt werd, maar dat zou niet mogen.

Als ik jouw was zou ik het toch even goed uitzoeken voordat je allemaal rotzooi in je database staat te pompen en je nog verder van huis bent....
Gewijzigd op 02/12/2019 13:54:45 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

02/12/2019 14:30:48
Quote Anchor link
Wat @Ariën zegt.

NB: het volgende verhaal gaat uit van een database(tabel) met een utf8(mb4) encodering. Idealiter lopen alle character encoderingen (HTML document, database-connectie, database, database-tabel, database-kolom en last but not least de encodering van de data in deze kolom zelf) alle in de pas. GA DIT NA. Je kunt niet zomaar ergens "UTF-8" neerzetten in plaats van "ISO-whatever" en dan doen alsof daarmee de kous af is :p. Dit is echt het onheil over je afroepen.

---

De makkelijkste manier om na te gaan of alles ok is is door een check te doen hoe dit op byteniveau staat opgeslagen. Dit is namelijk een test die niet afhankelijk is van een specifieke character encoding en onafhankelijk van een ingestelde character encodering altijd hetzelfde resultaat oplevert. Dit stelt je dus in staat afwijkingen te constateren op het moment dat er op verschillende plekken verschillende encoderingen worden gebruikt. Dit is onwenselijk.

In MySQL doe je dit met de functie HEX() en in PHP is dit bin2hex().

Het is zaak dat je dit zowel in MySQL als PHP controleert. Het kan namelijk zo zijn dat je niet op de goede manier met de database communiceert. MySQL compenseert dit achter de schermen, maar dit kan dus inderdaad wel resulteren in het wegschrijven van verkeerd geëncodeerde data. Dit komt dan pas naar buiten op het moment dat er wijzigingen (die mogelijk reparaties zijn omdat je dus voorheen op een verkeerde manier met je database sprak) worden aangebracht in de communicatie met je database. Of wanneer je je tabellen exporteert/migreert.

Om dit alles goed te simuleren is het dus ook zaak dat als je deze tests aan de PHP-kant uitvoert dat je op dezelfde manier een verbinding maakt met je database zoals je dat ook in je applicatie/website zou doen.

Wat je doet is het volgende: haal de kolom waarin de landnaam België staat opgeslagen als volgt op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT land, HEX(land) AS hex_land
FROM <tabelnaam>


Vervolgens controleer je de waarden in PHP. Hierbij geef je de hex-waarde uit de database weer en tevens het aan de PHP-kant gegenereerde equivalent met de oorspronkelijke land-kolom. Als het goed is komen deze twee waarden overeen. Indien dit niet het geval is houdt dit in dat de database zich genoodzaakt zag om vertalingen uit te voeren omdat de character encoding van de connectie afweek van de character encoding van de database-, tabel- of kolom-definitie.

Als $row het (associatief) record bevat toon je dit als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
echo 'waarde in MySQL: '.$row['land_hex'].'<br>';
echo 'waarde in PHP: '.strtoupper(bin2hex($row['land']));
?>

Beide waarde zouden -met een utf8(mb4) encodering- gelijk moeten zijn aan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
42656C6769C3AB

Hierbij gaat het eigenlijk uitsluiten om de laatste 4 karakters.

Mochten de waarden die uit worden gespuugd hiervan verschillen, of als de waarden onderling afwijken, dan zou ik je met klem aanraden om wat verder te graven om te zien waar deze verschillen vandaan komen.

En misschien loont het ook de moeite om de tabel "vaarweginfo" verder uit te normaliseren. Het lijkt mij beter om één landentabel aan te houden en hier middels id's aan te refereren, in plaats van letterlijke landnamen in de vaarweginfo-tabel op te slaan.

Aad B op 02/12/2019 12:12:34:
(als ik code tags hier omheen zet verdwijnt de ë compleet??)

Dit is waarschijnlijk een bug in deze website (interne link).

**snip**
Gewijzigd op 05/12/2019 08:31:27 door - Ariën -
 
Aad B

Aad B

04/12/2019 11:21:19
Quote Anchor link
Thomas, dank voor je uitgebreide toelichting, ik ga ermee aan de slag. Ik krijg sowieso al een andere uitkomst op de eerste query: 42656C6769EB. Het is me duidelijk dat er ergens wat discrepantie is in het traject database laden en presenteren met html/php. De (enige) tabel in de database wordt 2x per dag geladen vanuit een API van Rijkswaterstaat (middels lokale linux cron/mysql scripting, geen php). Het gaat om ongeveer 750 records per keer en vooraf wordt de tabel ge-truncate. Je opmerking om te normaliseren (land-landcode) is uiteraard juist maar gezien deze kleine tabel die alleen voor presentatie wordt gebruikt voor +/- 3 gebruikers niet nodig. Ik ga in ieder geval op zoek om de encoding in de hele keten consistent te krijgen. Best interessant en nogmaals dank!
 
Thomas van den Heuvel

Thomas van den Heuvel

04/12/2019 16:32:09
Quote Anchor link
42656C6769EB (dus EB in plaats van C3AB) is de latin1 encoding van de ë.

Als je dit vervolgens encodeert als UTF-8 dan resulteert dit in België.

Het is waarschijnlijk interessant om deze import verder onder de loep te nemen. Vraag is wat de character encoding is van de aangeleverde data (A), wat de charset is van de tabel(len) waarin je deze data wegschrijft (B), en welke character encoding wordt verondersteld bij het maken van de connectie (C).

Stel dat je doel is om alles weg te schrijven als UTF-8 (utf8(mb4) in MySQL) omdat je applicatie en tabeldefinities (B) van UTF-8 gebruik maken. Maar tegelijkertijd weet je dat de aangeleverde data (A) een of andere ISO-encodering heeft. Dit kun je dan automatisch laten vertalen naar UTF-8 door bij het maken van de verbinding aan te geven (C) dat er data met een ISO-encodering over de lijn dient te gaan. Dit doe je met set_charset().

set_charset() vormt in wezen een contract tussen jouw applicatie en de database. Dit contract valt in twee delen uiteen:
- jij moet er voor zorgen dat alle data die je aanlevert aan de database van deze character encoding is
- de database draagt er zorg voor dat deze, naar beste vermogen, data teruggeeft in deze voorgeschreven character encoding

En dit staat los van de character encoding die wordt gebruikt in de database, tabel of kolom van deze data. Dit houdt in dat als er een discrepantie bestaat tussen de ingestelde character encoding van de verbinding en de definities van de database MySQL zelf vertalingen uitvoert. Dit geldt zowel voor het uitlezen als het wegschrijven. Dit kun je bij een import in jouw voordeel gebruiken.

Maar wat dus heel belangrijk is is dat je weet (met name bij het wegschrijven dus) welke character encoding deze data heeft (en deze wat mij betreft altijd expliciet instelt, om geen enkele ruimte open te laten voor een andere interpretatie). Als de data ISO-whatever is (is min of meer equivalent met latin1) en je middels set_charset() utf8 of equivalent instelt, en de tabel waarin je dit wegschrijft dezelfde charset heeft als in de connectie is ingesteld, dan gaat MySQL dus geen vertalingen uitvoeren en wordt je data weggeschreven als latin1 in een utf8 tabel.

Dit is ook hetgene wat waarschijnlijk is veranderd. Voorheen had je mogelijk geen set_charset() ingesteld, de default van MySQL (en zelfs MariaDB) was een hele tijd -en is dit misschien nog steeds- latin1. Dus de hierboven beschreven automatische vertaling verliep automatisch. De default character encoderingen in Debian zijn mogelijk al utf8(mb4), dus dan worden die vertalingen dus niet meer uitgevoerd omdat die al gelijk lopen met je database. Dit zou een verklaring kunnen zijn voor wat er nu gebeurt.

Dus omdat de defaults zijn veranderd werkt dit niet meer. Dit onderstreept wat mij betreft het belang om altijd expliciet een character encoding in te stellen bij het maken van een database-connectie.
Gewijzigd op 04/12/2019 16:36:40 door Thomas van den Heuvel
 
Aad B

Aad B

04/12/2019 21:15:24
Quote Anchor link
Thomas, dank voor je wijze les. Mijn doel is nu om om alles weg te schrijven als UTF-8 (utf8(mb4) in MySQL.
In het huidige script, dat overigens geheel naar wens werkt, kan ik geen set_charset() doen. Het ophaalscript is geen php. De methode van ophalen van de data via de Rijksawaterstaat API is in een bash script, een eenvoudige wget met wat parameters in .wgetrc
Wellicht kan ik daar nog een parameter opgeven zoals --header='Accept-Charset:
Ik ontvang een .csv file en als ik in linux in vi of cat de file bekijk zie ik netjes: België
Lokaal ben ik nu alles aan het afstemmen op UTF-8 (utf8(mb4)

De presentatie, een middels php gegenereerde web pagina, is sinds gisteren al in orde nadat ik de tip van SanThe en Arien kreeg om de header aan te passen.
Gewijzigd op 04/12/2019 21:17:21 door Aad B
 
Thomas van den Heuvel

Thomas van den Heuvel

05/12/2019 01:36:01
Quote Anchor link
@Aad hm, maar je kiept dat middels een bashscript wel de database in denk ik? Mogelijk kun je daar dus wat dingen aanpassen. Als dit een LOAD DATA ... commando is dan kun je hierbij een CHARACTER SET opgeven als je weet wat de character encoding van de bron is. Uit de documentatie:
Quote:
If the contents of the input file use a character set that differs from the default (noot: die van de server), it is usually preferable to specify the character set of the file by using the CHARACTER SET clause.


*knip*
Edit:
Zo, en hier stopt de discussie over deze site. Dit is dus geen aanwinst voor andermans topic. Dat iets niet werkt kan je melden op de juiste plek, maar een hele discussie of negatieve off-topic hierover hoort hier NIET!
Gewijzigd op 05/12/2019 08:30:31 door - Ariën -
 
Aad B

Aad B

05/12/2019 09:39:36
Quote Anchor link
Thomas, het werkt inderdaad via een load data configuratie. De parameter [CHARACTER SET charset_name] staat er niet in, ik neem dat ook mee. Nogmaals dank voor de uitgebreide toelichting over charset issues.

@Ariën: De "knip" en edit????
Gewijzigd op 05/12/2019 09:40:27 door Aad B
 
- Ariën  -
Beheerder

- Ariën -

05/12/2019 09:50:56
Quote Anchor link
Dat was enkel een discussie die niks hiermee te maken had.
 



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.