captain_torche Posté 17 Septembre 2015 Posté 17 Septembre 2015 Je suis en train de travailler avec une imprimante our étiquettes Zebra, et je galère quelque peu avec l'encodage des caractères. Dans l'éditeur de templates, quand j'écris un "é", il sera transformé en "\82" dans le fichier, et imprimé correctement en "é". Par contre, je ne trouve pas la logique de correspondance "é => 82" pour pouvoir l'appliquer aux textes issus de ma base de données qui seront intégrés dans l'étiquette. Si quelqu'un a une piste, ça me dépannerait beaucoup. Merci d'avance !
Dan Posté 17 Septembre 2015 Posté 17 Septembre 2015 Le 82 est la valeur hex du code du é (130 décimal, ou 0x82) http://www.theasciicode.com.ar/extended-ascii-code/letter-e-acute-accent-e-acute-lowercase-ascii-code-130.html
Dan Posté 17 Septembre 2015 Posté 17 Septembre 2015 Je précise... du moins dans les codes page 437 (IBM PC) et 850 (Latin 1)... et d'autres sans doute ! http://www.ascii-codes.com/
captain_torche Posté 17 Septembre 2015 Auteur Posté 17 Septembre 2015 Merci Dan ! Par contre, comment convertir mon texte de manière à obtenir cet encodage ? Parce que depuis l'utf8, ord('é') donne 195, depuis ISO-8859-1(5) -> 233 Et si je fais un iconv('UTF-8', 'ASCII', "é"), j'obtiens une erreur.
captain_torche Posté 17 Septembre 2015 Auteur Posté 17 Septembre 2015 Je me réponds tout seul : a priori il faut convertir de cette manière : $text = iconv('UTF-8', 'CP437', $text);
Dan Posté 17 Septembre 2015 Posté 17 Septembre 2015 Et en remplaçant ASCII par CP850 ? Edit: je n'avais pas vu ton dernier message.....
Dan Posté 17 Septembre 2015 Posté 17 Septembre 2015 Ceci fonctionne aussi : print dechex(ord(iconv('UTF-8','CP850',"é"))); et donne 82 à l'affichage (dans la mesure où tu entres ce "é" en UTF bien sur)
captain_torche Posté 17 Septembre 2015 Auteur Posté 17 Septembre 2015 Et voilà ma fonction définitive : on ne remplace que les caractères ASCII étendus (>= 128) : function zebraConvert($text) { $return = ''; $arr = str_split(iconv('UTF-8', 'CP437//TRANSLIT', $text)); foreach ($arr as $letter) { $ord = ord($letter); if ($ord >= 128) { $return .= '\\' . dechex($ord); } else { $return .= $letter; } } return $return; } Edit : on a fait la même chose, grosso modo, sauf que je l'ai volontairement étendu à des messages plus longs, et que je ne fais la conversion que pour les caractères ASCII étendus.
Dan Posté 17 Septembre 2015 Posté 17 Septembre 2015 Moi je n'ai pas écrit un programme, juste donné une piste ... Tu sais bien que les admins système sont des feignants, non ? Et je me suis assez fait ch... avec la conversion de la base du Hub en UTF-8 ...
captain_torche Posté 17 Septembre 2015 Auteur Posté 17 Septembre 2015 Oui, c'est ta journée charset ! Par contre, il y a quelle différence entre CP437 et CP850 ?
Dan Posté 17 Septembre 2015 Posté 17 Septembre 2015 Le CP850 est le jeu Latin 1 pour l'Europe occidentale. Le CP437 est le jeu originel d'IBM Tu as les différents CP sur cette page, juste sous le titre principal. http://www.ascii-codes.com/
mickaelborchakov Posté 23 Septembre 2015 Posté 23 Septembre 2015 merci pour vos témoignages, mais @Dan quand tu dis "print dechex(ord(iconv('UTF-8','CP850',"é")));", ca affiche 82 du coup ?
captain_torche Posté 23 Septembre 2015 Auteur Posté 23 Septembre 2015 @michaelborchakov, il me semble que c'est très facile à tester, non ? Sachant qu'en plus tu as la réponse à la question sur la ligne d'en-dessous...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant