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?
Réponses
Trop de publicités?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.
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.
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.