8 votes

Octets et points de code en ruby

Quelle est la différence entre les fonctions ruby string : points de code et octets ?

'abcd'.bytes
=> [97, 98, 99, 100]

'abcd'.codepoints
=> [97, 98, 99, 100]

19voto

Sergio Tulentsev Points 82783

bytes renvoie des octets individuels, quelle que soit la taille des caractères, alors que codepoints renvoie les points de code unicode.

s = '日本語'
s.bytes # => [230, 151, 165, 230, 156, 172, 232, 170, 158]
s.codepoints # => [26085, 26412, 35486]
s.chars # => ["日", "本", "語"]

Je vois d'où vient votre confusion. Ruby utilise maintenant l'encodage utf-8 par défaut et utf-8 a été spécifiquement conçu pour que ses premiers points de code (0-127) soient exactement comme dans le codage ASCII. L'ASCII est un codage avec des caractères d'un octet, donc dans les exemples des méthodes de votre question bytes y codepoints renvoient les mêmes valeurs, par coïncidence .

Ainsi, si vous devez décomposer une chaîne en caractères, utilisez soit chars o codepoints (selon ce qui convient le mieux à votre cas d'utilisation). Utilisez bytes uniquement lorsque vous traitez la chaîne de caractères comme un blob binaire opaque, et non comme du texte.

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