Olphebus Posté 16 Mai 2010 Partager Posté 16 Mai 2010 (modifié) Bonjour, je ne parvient pas à "parser" une chaine en utf8. Chaque caractère à une largeur en pixel définie dans une table, et mon système passe une ligne tous les 94px. Mais cela marche mal avec certains caractères.. J'ai mis mon code en dessous, pourriez vous m'aider ? et voici le résultat de mon code : http://chouquette.fr/postForum6895364/generer.php certains caractères deviennent des "�" Merci d'avance ! Pierre. ps: j'ai besoin des caractères spéciaux (quelques lettre grecs et symboles mathématiques) donc je ne souhaite pas les supprimer. <?phpheader( 'content-type: text/html; charset=utf-8' );$table = array();// tous les caracteres font 4 pixel éxéptés ceux-ci :$table['à'] = 5;$table['f'] = 3;$table['i'] = 2;$table['l'] = 3;$table['m'] = 6;$table['s'] = 3;$table['t'] = 3;$table['û'] = 5;$table['w'] = 6;$table['z'] = 5;$table['µ'] = 5;$table['°'] = 5;$table['!'] = 2;$table['#'] = 6;$table['$'] = 6;$table['&'] = 5;$table['('] = 3;$table[')'] = 3;$table[','] = 3;$table['.'] = 2;$table['\''] = 2;$table['-'] = 4;$table[';'] = 3;$table['@'] = 6;$table['['] = 3;$table[']'] = 3;$table['|'] = 2;$table[' '] = 1;$table['*'] = 6;$table['≠'] = 6;$table['≤'] = 5;$table['≥'] = 5;$table['→'] = 5;$table['α'] = 5;$table['γ'] = 5;$table['μ'] = 5;$table['π'] = 6;$table['ρ'] = 5;$table['σ'] = 5;$table['τ'] = 5;$table['Φ'] = 6;$table['Δ'] = 6;$table['Σ'] = 5;// exemple de texte qui ne marche pas car de nombreux caracteres// sont codés sur plusieurs bits en UTF8$textedebut = "Iñtërnâtiônàlizætiøn αβγδεθλμπρστΦχ→≡≤≥≠³²√";$textedebut = str_replace("\r\n","\n",$textedebut);$tailleLigne = 0;$texte = "";$tCaract = 0;for($z=0; $z<mb_strlen($textedebut); $z++) {if($textedebut[$z] == "\n") {$tailleLigne = 0;}else {$tCaract = 4;if(array_key_exists($textedebut[$z], $table)){$tCaract = $table[$textedebut[$z]];}$tailleLigne += $tCaract;if ($tailleLigne > 93) {$texte.= "\n";$tailleLigne = $tCaract;}}$texte .= $textedebut[$z];}echo $texte;?> Modifié 16 Mai 2010 par Olphebus Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 16 Mai 2010 Partager Posté 16 Mai 2010 Ca me semble un peu bizarre ce que tu fais, mais bon... Le problème vient à mon avis du fait que tu utilises $textedebut[$z] pour prendre un caractère, ce qui semble être troublé par l'UTF-8 (parce que ça prend les octets qui composent le caractère un par un, et donc de temps en temps tu insères un \n au milieu d'un caractère... et accessoirement il ne trouvera jamais les caractères en question dans ta table). Utilise plutôt mb_substr($textedebut,$z,1), ça devrait mieux marcher. Jacques. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Olphebus Posté 16 Mai 2010 Auteur Partager Posté 16 Mai 2010 (modifié) merci pour ton aide ! ca marche nickel ! au fait je l'utilise pour générer un code assembleur pour afficher du texte sur un écran lcd.. mon écran LCD ne peut afficher que 94pixel sinon ca bug, donc je formate le texte en php avant. donc c'est pas bizarre Modifié 16 Mai 2010 par Olphebus Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 16 Mai 2010 Partager Posté 16 Mai 2010 Et les caractères font 4 pixels de large en tout, y compris l'espacement entre les caractères? Et il supporte tous les caractères UTF-8? Jacques. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Olphebus Posté 16 Mai 2010 Auteur Partager Posté 16 Mai 2010 (modifié) Nan il ne supporte pas tous les caractères UTF8,mais il fait pas mal de caractères grecs et de caractères mathématiques ( intégral, racine carré, etc..) que seul l'utf8 possède sur le pc je crois.. tous les caractères sauf ceux de la table font 4px et l'espacement entre les caractères est compris dans les chiffres. et c'est mon compilateur asm qui fait la correspondance du code utf8 au code de mon lcd. Merci ! Pierre. Modifié 16 Mai 2010 par Olphebus Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 16 Mai 2010 Partager Posté 16 Mai 2010 4 pixels espace inclus (donc 3 pixels pour le caractère lui-même) c'est super hard. Rien que pour distinguer N, M et H par exemple c'est quasiment impossible. Et même 4 pixels hors espace (ce qui rendrait ton décompte faux) c'est vraiment difficile. Un bon vieux Minitel en mode 80 colonnes c'était 6 pixels de large par caractère, espacement inclus. Tu es vraiment sûr de tes décomptes? Jacques. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Olphebus Posté 17 Mai 2010 Auteur Partager Posté 17 Mai 2010 (modifié) Oui c'est bien 3 pixel pour le caractère lui même, voici quelques caractères de la police, je les aient pas tous mis mais ils font tous 4 pixel hormis les exceptions de la table :/>http://chouquette.fr/postForum6895364/exemple/ 1 pixel sur l'ecran lcd est plus gros que 1 pixel sur le PC donc on les distingue assez clairement malgré tout. exemple de texte : />http://chouquette.fr/postForum6895364/exemple/SCREEN01.BMP (la taille à été doublé par deux car sinon ca parait petit sur un écran de pc mais il y a bien 3 "pixels" pour chaque caractère) (si ca t'intéresse et que tu veux que je mette les images de toute la police je peux le faire) Sinon le LCD propose une deuxième police de caractère plus grosse ou tous les caractères font 6 de large sans exception mais je vais me servir de la petite elle permet de mettre nettement plus de texte. Modifié 17 Mai 2010 par Olphebus Lien vers le commentaire Partager sur d’autres sites More sharing options...
Leonick Posté 17 Mai 2010 Partager Posté 17 Mai 2010 pour moi le n ressemble à un caractère tronqué, car il représente le caractère minuscule alors que les autres sont en majuscule Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant