31 votes

Ruby prend-il en charge l'unicode et comment fonctionne-t-il?

Je commence tout juste à apprendre Ruby (pour finalement passer à RoR), mais on vient de me dire que Ruby ne prend pas en charge Unicode. Est-ce vrai? Comment les programmeurs Ruby prennent-ils en charge unicode?

31voto

molf Points 34978

Ce que vous avez entendu est obsolète et s'applique (en partie seulement) de Ruby 1.8 ou avant. La dernière version stable de Ruby (1.9), prend en charge pas moins de 95 différents encodages de caractères (compté sur mon système, il suffit maintenant). Cela comprend à peu près tous connu Unicode Transformation de Formats, y compris UTF-8.

La précédente version stable de Ruby (1.8) a une prise en charge partielle pour l'UTF-8.

Si vous utilisez des Rails, il prend soin de défaut l'encodage UTF-8 pour vous. Si vous avez besoin d'un encodage UTF-8 de sensibilisation, Rails va travailler pour vous , peu importe si vous exécutez Ruby 1.9 ou Ruby 1.8. Si vous avez le caractère spécifique d'exigences de codage, vous devriez viser pour Ruby 1.9.

Si vous êtes vraiment intéressés, voici une série d'articles décrivant les problèmes d'encodage dans Ruby 1.8 et comment ils travaillaient autour, et finalement résolu en Ruby 1.9. Rails comprend toujours des solutions pour de nombreux défauts courants dans Ruby 1.8.

15voto

Kannaiyan Points 118

L'ajout de la ligne suivante en haut de mon fichier l'a résolu.

 # encoding: utf-8
 

14voto

Jörg W Mittag Points 153275

Ce n'est pas vrai. Ce qui est vrai est que Ruby ne prend pas en charge uniquement Unicode, il prend en charge toute une série d'autres codages ainsi.

Ceci est en contraste à des systèmes tels que Java, .NET, ou en Python, qui suivent le "On Codant Pour les gouverner Tous" modèle. Ruby a ce que l'un des concepteurs de Ruby m17n système appelle une "CSI" du modèle (Code Indepedent), ce qui signifie que, au lieu de toutes les chaînes de caractères ayant une seule et même codage, chaque chaîne est étiqueté avec son propre codage.

Cela a des avantages significatifs à la fois pour la facilité d'utilisation et la performance, car cela signifie que si votre entrée et de sortie des codages sont les mêmes, vous n'avez jamais besoin de transcoder, alors qu'avec Un Vrai modèle de Codage, vous avez besoin de transcoder deux fois dans le pire des cas (et que pire des cas cela arrive malheureusement assez souvent, parce que la plupart de ces environnements a choisi un codage interne que personne n'utilise en fait), à partir de l'encodage en entrée dans le codage interne, puis à la sortie de l'encodage. En Ruby, vous avez besoin de transcoder au plus une fois.

Le problème de base avec la DÉNITION de modèle est que, quel que soit l'encodage que vous choisissez comme le seul Vrai Encodage, il sera un choix complètement arbitraire, car il n'est tout simplement pas un codage unique que tout le monde, ou même une majorité, utilise.

En Java, par exemple, ils ont choisi UCS-2, le seul Véritable Encodage. Puis, quelques années plus tard, il s'est avéré que l'UCS-2 était en fait pas assez pour encoder tous les caractères, de sorte qu'ils ont dû prendre un en arrière-incompatible changement de Java, pour passer à l'UTF-16, le seul Véritable Encodage. Sauf en ce moment, une grande partie du monde a évolué depuis UTF-16 pour de l'UTF-8. Si Java a été inventé quelques années plus tôt, ils auraient probablement choisi ASCII comme le seul Vrai Encodage. Si elle avait été inventée dans un autre pays, il peut être Shift-JIS. Si elle avait été inventée par une autre entreprise, il peut être EBCDIC. Il est vraiment tout à fait arbitraire, et un tel choix ne devrait pas être.

5voto

GregPK Points 650

C'est une question assez ancienne. La version stable actuelle de Ruby est 2.0.1. Oui, il gère la plupart de ce que vous pouvez lui envoyer en Unicode, mais sachez qu'il se casse assez facilement.

Jetez un œil à cet exemple de code et aux résultats (inspirés de cela ):

 ["noël"," 

0voto

Andrew Grimm Points 22996

Dans cette réponse à une autre question, une personne a dit qu'elle avait des problèmes avec Iconv lors de la gestion des données Unicode dans Ruby 1.9, mais je ne peux pas garantir sa précision.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X