9
votes

Quelle est la façon de représenter un Unichare à Lua

Si je dois avoir la valeur python suivante, UNICODE CHAR '0':

>>> unichr(0)
u'\x00'


0 commentaires

4 Réponses :


10
votes

Il n'y en a pas.

Lua n'a aucun concept de valeur unicode. Lua n'a pas de concept de Unicode du tout . Toutes les chaînes Lua sont des séquences de "caractères" 8 bits, et toutes les fonctions de chaîne Lua les traiteront comme telles. Lua ne traite pas les chaînes comme ayant un codage unicode; Ils sont juste une séquence d'octets.

Vous pouvez insérer un nombre arbitraire dans une chaîne. Par exemple: xxx

est équivalent à: xxx

la notation \ est suivie par 3 chiffres (ou l'un des caractères d'évacuation), qui doivent être inférieurs ou égaux à 255. Lua est parfaitement capable de manipuler des chaînes avec des caractères incorporés \ 000 .

mais vous ne peut pas insérer directement des points de codes Unicode dans les chaînes Lua. Vous pouvez décomposer le code de code dans UTF-8 et utiliser le mécanisme ci-dessus pour insérer le code de code dans une chaîne. Par exemple: xxx

Ceci est le caractère x suivi du Unicode combinant au-dessus du caractère de la flèche .

Mais puisqu'aucune fonction Lua ne comprenne réellement UTF-8, vous devrez exposer certains fonction qui attend une chaîne UTF-8 afin de pouvoir être utile de quelque manière que ce soit.


0 commentaires

3
votes

Bien que la Lua natif ne supporte ni ne gère directement Unicode, ses cordes sont vraiment des tampons d'octets arbitraires que par convention détiennent des caractères ASCII. Étant donné que les chaînes peuvent contenir toutes les valeurs d'octets, il est relativement simple de construire une prise en charge d'unicode sur des chaînes indigènes. Si les tampons d'octet se révèrent être insuffisamment robustes dans le but, on peut également utiliser un objet userData pour tenir quelque chose et avec l'ajout d'une métavère appropriée, dochez-la avec des méthodes de création, une translation à une version souhaitée. codage, concaténation, itération et autre chose dont il est nécessaire.

Il y a Une page du Wiki de l'utilisateur Lua qui discute de différentes façons de gérer UNICODE à Lua programmes.


0 commentaires

5
votes

Que diriez-vous de

function unichr(ord)
    if ord == nil then return nil end
    if ord < 32 then return string.format('\\x%02x', ord) end
    if ord < 126 then return string.char(ord) end
    if ord < 65539 then return string.format("\\u%04x", ord) end
    if ord < 1114111 then return string.format("\\u%08x", ord) end
end


2 commentaires

Je ne comprends pas comment cela répond à votre propre question. Vous demandez vraiment simplement de demander comment formater un numéro hexadécimal avec un \ u devant celui-ci?


La question intitulée - "Quel est le moyen de représenter Unichar en Lua" - en fait, j'avais besoin de la fonction Lua pour générer la même chose que le script de python équivalent depuis que l'on vient à remplacer l'autre. Apparemment, c'est juste assez.



3
votes

Pour une réponse plus moderne, Lua 5.3 a maintenant le utf8. Char :

reçoit zéro ou plusieurs entiers, convertit chacun à sa séquence d'octets UTF-8 correspondante et renvoie une chaîne avec la concaténation de toutes ces séquences.


0 commentaires