Ce am dorit să fac: un program în Java ce capturează conversații de pe IRC și le stochează într-o bază de date mySQL; din acea bază de date se ia prin PHP și se afișează pe o pagină HTML. Deși pare destul de mult de făcut, necesită puțin cod, dar multă atenție la interconectarea elementlor: programul Java, conectorul dintre Java-mySQL (JDBC), baza de date mySQL și script-ul PHP.
Am creat ‘topologoia’ necesară și programul mergea ok. Dar am descoperit rapid o problemă: pagina web (HTML+PHP) nu afișa diacritice. Și am început să caut prin fiecare element să văd unde era problema ( oricare din componente putea să ducă la problema aceasta).
Am început prin modificarea paginii PHP/HTML și forțarea ca browserul să citeacă caracterele în format UTF-8. Codul nu depinde de PHP (am presupus că el transmite corect din baza de date în HTML) ci de headerul HTML.
<head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> [...] </head>
Al doilea test a fost făcut pe mySQL. Implicit, baza de date codează folosind Latin. Și tabela unde se făcea scrierea trebuia trecută pe UTF.
CREATE TABLE `chats` ( [..] ) DEFAULT CHARSET=utf8;
Cum programul Java imprima corect la stdout diacriticile, problema trebuia să fie la JDBC. Suportul pentru UTF a fost adăugat în JDBC, dar trebuia specificat la conectarea cu baza de date. Acest lucru se face pasând un parametru la URL-ul bazei de date.
jdbc:mysql://my_server/my_data_base?unicode=true&characterEncoding=utf-8


E vai de noi. Este foarte nasol ca in 2009 nu exista suport pentru asa ceva by default si trebuie sa ne ia ameteeala , ca programatori, ca sa avem suport pentru caractere mai “interesante”.
Vorbeste pt tine. Noi, ca programatori suntem atenti atunci cand ne setam ENV-ul sa fie tot UTF-8 … respectiv modificat my.cnf in utf-8_unicode_ci imediat dupa instalare.
Welcome to the internets … we have broken encodings and lots of cookies