Comment gérer les caractères unicode avec les écrans LCD à caractères?

8

Je voudrais acheter un écran LCD de Arduino pour afficher certains résultats d'un appel Web http; l'API Web renvoie un texte JSON codé en UTF-8.

J'ai lu que ICU est la voie à suivre pour gérer Unicode dans les programmes C / C ++ pour Arduino.

Mes questions:
pourrai-je afficher des caractères UTF-8 sur ce type d'écran ?
Existe-t-il des écrans LCD à caractères (abordables) capables d'afficher des caractères UTF-8?

systempuntoout
la source
3
Sommes-nous en train de parler d'un affichage graphique ou d'un affichage de caractères segmenté? Sur un affichage segmenté, vous ne pouvez évidemment pas afficher un signe qui ne correspond pas au motif de segment. Pour les utilisations "occidentales" non ascii, vous pouvez probablement revenir au caractère de base (non accentué, etc.). Pour les autres scripts, vous n'avez probablement pas de chance.
drxzcl

Réponses:

6

Je ne suis pas très familier avec Arduino, mais regardons-le du point de vue LCD.

Presque tous les écrans LCD à caractères populaires utilisent le contrôleur HD44780 de nos jours (c'est ce que prend en charge la bibliothèque LiquidCrystal ). Ce contrôleur ne prend pas directement en charge UTF-8, chaque caractère est représenté par un seul octet.

Vous devez donc convertir manuellement les caractères UTF-8 en 8 bits. Le contrôleur possède un générateur de caractères intégré avec 208 5x8 et 32 ​​5x10 caractères, plus jusqu'à 8 caractères définis par l'utilisateur (voir createChar ). Vous devez mapper chaque caractère d'entrée à l'un des caractères prédéfinis / personnalisés - vous ne pouvez évidemment afficher qu'un sous-ensemble de caractères UTF8, vous devez décider quels caractères vous souhaitez / pouvez afficher.

La conversion elle-même devrait être assez simple - il vous suffit d'itérer sur la chaîne UTF8, en mappant chaque caractère sur un seul octet. Vous voudrez probablement utiliser des tables de recherche pour rester simple. Faites-moi savoir si cela nécessite des explications supplémentaires.

Peintres de code
la source
Merci; pensez-vous que ce type d' affichage graphique Tft pourrait offrir un meilleur support unicode?
systempuntoout
1
C'est un affichage graphique, pour autant que je puisse voir, il peut donc afficher à peu près tout ce que vous voulez. La bibliothèque fournie fournit également des fonctions pour peindre du texte, mais encore une fois, elle ne prend en charge que les caractères 8 bits. Ainsi, avec cet affichage, vous devez soit effectuer le même type de conversion que celui décrit ci-dessus et utiliser la bibliothèque telle quelle, soit vous devez modifier la bibliothèque pour prendre en charge UTF8. Gardez à l'esprit que l'utilisation d'un affichage graphique rendra votre code plus gros - vous avez besoin d'une bibliothèque supplémentaire, d'une police, etc. Mais au moins vous avez le contrôle total du jeu de caractères disponible - la police fait partie du logiciel.
Code Painters
4

Unicode est compliqué et grand, dans son intégralité, il est trop grand pour un Arduino. Dans la version actuelle, il y a au total plus de 100 000 caractères, dont cunéiformes, hiéroglyphes, Klingon, sans parler de plusieurs milliers de caractères chinois.

Donc, si vous voulez vraiment montrer des caractères Unicode sur un Arduino:

  • Obtenez un affichage graphique. Celui que vous mentionnez est un affichage de caractères, il ne peut afficher qu'un ensemble principalement fixe de 256 caractères.

  • Définissez un petit sous-ensemble de caractères que vous souhaitez gérer. Il existe des sous-ensembles prédéfinis, par exemple les sous-ensembles européens multilingues ont l' air bien.

  • Obtenez des polices et dépouillez-les jusqu'à l'ensemble dont vous avez besoin. Notez que même l'affichage peut être beaucoup plus compliqué que ce à quoi vous êtes habitué en ASCII, en raison de la combinaison de caractères, de l'écriture bidirectionnelle et autres. Le mieux est probablement de s'en tenir aux caractères latins sans combiner les accents. Le cyrillique et le grec devraient également convenir, de même que tout ce qui est une simple séquence de caractères de gauche à droite.

  • Vous pourriez peut-être utiliser de la mémoire externe pour stocker les polices.

Ensuite, il y a beaucoup d'autres sujets dont vous n'avez probablement pas besoin, par exemple le tri et la recherche, voir la norme Unicode et ses annexes (c'est grand!).

Oubliez ICU, il a besoin de mégaoctets de mémoire.

starblue
la source
Je vais devoir essayer de mettre (un sous-ensemble!) D'ICU sur l'Arduino .. devrait être amusant.
Steven R. Loomis