5 votes

Longueur d'une chaîne unicode

Dans mon application Rails (2.3, Ruby 1.8.7), j'ai besoin de tronquer une chaîne de caractères à une certaine longueur. La chaîne est unicode, et lors de l'exécution de tests dans la console, tels que ''.length j'ai réalisé qu'une double longueur est retournée. Je voudrais une longueur indépendante de l'encodage, de sorte que la même troncature soit effectuée pour une chaîne unicode ou une chaîne encodée en latin1.

J'ai parcouru la plupart des documents sur l'unicode pour Ruby, mais je suis encore un peu dans le noir. Comment aborder ce problème ?

4voto

Teoulas Points 1848

Rails dispose d'un mb_chars qui renvoie des caractères multi-octets. Essayez unicode_string.mb_chars.slice(0,50)

3voto

Lri Points 8342
"ア".size # 3 in 1.8, 1 in 1.9
puts "ア".scan(/./mu).size # 1 in both 1.8 and 1.9

1voto

Jordan Brough Points 2408

chars y mb_chars ne vous donnent pas d'éléments de texte, ce que vous semblez rechercher.

Pour les éléments de texte, vous utiliserez l'option unicode gem .

mb_chars :

>> 'กุ'.mb_chars.size
=> 2

>> 'กุ'.mb_chars.first.to_s
=> "ก"

éléments de texte :

>> Unicode.text_elements('กุ').size
=> 1

>> Unicode.text_elements('กุ').first
=> "กุ"

0voto

Chris Heald Points 28814

Vous pouvez utiliser quelque chose comme str.chars.slice(0, 50).join pour obtenir les 50 premiers caractères d'une chaîne, quel que soit le nombre d'octets utilisés par caractère.

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