Menu

#23 Support UTF-8

0.2.3
open
5
2012-09-16
2011-04-14
No

Would it be possible to support the UTF-8 encoding (for example with an option in the config)?
This does not interfere with the TetriNET protocol because the character 0xFF is forbidden in a valid UTF-8 string, and I really need it.
I will probably code it anyway in a few weeks and I’ll attach the patch when it will be done.

Thank you :-)

Discussion

  • Emmanuel Bourg

    Emmanuel Bourg - 2011-04-14

    Le protocol tetrinet ne spécifie pas d'encoding, chaque client est libre de coder ses messages de la manière dont il le souhaite. Par exemple le client d'origine sous Windows encode en Cp1252, et GTetrinet sous Linux en UTF-8. Quand le serveur relaye les messages entre deux clients il doit donc les transformer pour éviter de leur envoyer des caractères mal formés.

    Ce mécanisme a été mis en place dans Jetrix 0.3, les clients GTetrinet sont servis en UTF-8, et les autres en Cp1252. Il y a toutefois quelques limitations :

    • le serveur ne peut pas deviner l'encoding utilisé, il se base donc sur le nom du client pour décider d'adapter l'encoding. Le serveur doit donc connaitre tous les clients et leurs encoding respectifs.
    • le nom du client n'étant communiqué qu'après la phase de connexion comportant le nom du joueur, il n'est pas possible de déterminer l'encoding utilisé par le client pour envoyer le nom du joueur.

    Il n'y a hélas pas de solution vraiment parfaite. Idéalement il faudrait imposer l'utilisation d'UTF-8 dans le protocole mais cela signifie abandonner la compatibilité avec les anciens clients. On pourrait imposer l'utilisation de Cp1252 mais cela fermerait le jeu aux langues non latines. Enfin on pourrait changer la handshake initiale pour qu'un client indique qu'il communique en UTF-8, mais c'est difficilement réalisable en restant compatible avec les autres serveurs Tetrinet.

     
  • Guillaume Brunerie

    Merci :-)
    En fait j’avais lu trop vite l’annonce de Jetrix 0.2.2, j’avais lu « Prevent clients from connecting on a server with a default charset different from ISO-8859-1 » au lieu de « Fixed a bug preventing clients from connecting on a server with a default charset different from ISO-8859-1 », d’où ma question un peu bizarre ^^

    Mais comment est-ce que le serveur connaît le nom du client ?
    Je ne vois aucun endroit dans le protocole où le client doit dire qui il est.

     
  • Emmanuel Bourg

    Emmanuel Bourg - 2011-04-14

    L'identification du client n'est effectivement pas dans le protocole d'origine. Il s'agit d'une des rares extensions du protocole communément implémentées dans les clients/serveurs récents.

    Le serveur envoi un message "lvl 0 0" au client, message sans effet pour un client classique. En réponse le client renvoie "clientinfo <nom> <version>".</version></nom>

    L'auteur du client iTetrinet sous Mac a très bien documenté le protocole si tu recherches des détails :

    https://github.com/xale/iTetrinet/wiki

     
  • Nobody/Anonymous

    Merci pour le lien, je ne connaissais que la page de knarf2 qui est bien mais pas toujours très précise.
    Celui-là m’a l’air bien plus précis et complet :)

     

Anonymous
Anonymous

Add attachments
Cancel